阅读C ++ 17,现在可以在if语句中进行多次初始化:
if (int x = func(), y = func2(); x > 0 && y > 0)
{
}
很好,也与C ++ 17中的另一个功能结合,结构化绑定:
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
{}
缺少';'之前','
这是VS2017中的错误还是不可能?
答案 0 :(得分:17)
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;
)或单个结构化绑定(simple-declaration
下的第二个,相当冗长的行)。
<子>
1 不严格相同类型(int x, *y;
),但重点应该是明确的。
子>