Ser*_*sen 16 c++ c++17 structured-bindings
阅读C++ 17,现在可以在if语句中进行多次初始化:
if (int x = func(), y = func2(); x > 0 && y > 0)
{
}
Run Code Online (Sandbox Code Playgroud)
不错的,也结合了C++ 17中的另一个功能,结构化绑定:
if (auto[iter, success] = set.insert("Hello"); success)
{ }
else
{ }
Run Code Online (Sandbox Code Playgroud)
但是,在VisualStudio 2017中无法编译这两个功能.
if (auto[iter, success] = set.insert("Hello"), [iter2, success2] = set.insert("Foo"); success && success2)
{}
else
{}
Run Code Online (Sandbox Code Playgroud)
失踪 ';' 之前','
这是VS2017中的错误还是不可能?
Sto*_*ica 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 ;
Run Code Online (Sandbox Code Playgroud)
它从上面总结了标准(为了简洁起见,删除了一些可选的东西),但起点是[stmt.select]/1.
问题的关键在于a simple-declaration是逗号分隔的声明符列表,它引入了相同类型1(decl-specifier-seq init-declarator-list;)的对象或单个结构化绑定(第二个,相当详细的行simple-declaration).
1不是严格相同的类型(int x, *y;),但重点应该是明确的.
| 归档时间: |
|
| 查看次数: |
700 次 |
| 最近记录: |