gpt4 book ai didi

c++ - if 语句中的结构化绑定(bind)初始化程序无法编译

转载 作者:IT老高 更新时间:2023-10-28 22:20:34 26 4
gpt4 key购买 nike

阅读 C++17,现在可以在 if 语句中进行多次初始化:

if (int x = func(), y = func2(); x > 0 && y > 0)
{
}

不错,还结合了 C++17 中的另一个特性,结构化绑定(bind):

if (auto[iter, success] = set.insert("Hello"); success)
{ }
else
{ }

但是结合这两个功能在 VisualStudio 2017 中无法编译。

if (auto[iter, success] = set.insert("Hello"), [iter2, success2] = set.insert("Foo"); success && success2)
{}
else
{}

missing ';' before ','

这是 VS2017 中的错误还是不可能?

最佳答案

MSVC 在这方面的钱是对的。这仅针对语法:

selection-statement:  
if ( init-statement condition )

init-statement:
simple-declaration

simple-declaration:
decl-specifier-seq init-declarator-list;
decl-specifier-seq ref-qualifier [ identifier-list ] initializer ;

上面总结了整个标准(为简洁起见,删除了一些可选的内容),但起点是[stmt.select]/1 .

问题的关键在于,simple-declaration 要么是一个逗号分隔的声明符列表,它们引入了相同类型的对象1(decl- specifier-seq init-declarator-list;) 单个结构化绑定(bind)(simple-declaration 下的第二行,相当冗长)。


<子>1 不是严格同类型(int x, *y;),但重点要明确。

关于c++ - if 语句中的结构化绑定(bind)初始化程序无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46156398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com