nht*_*rnm 2 c++ types initializer-list auto
在下面的C++代码中,什么是类型a?typeid回报St16initializer_listIPKcE
auto a = { "lol", "life" };
Run Code Online (Sandbox Code Playgroud)
当你有
auto a = { "lol", "life" };
Run Code Online (Sandbox Code Playgroud)
编译器将尝试推导出std::initializer_list类型是所有元素的位置.在这种情况下"lol",并"life"都是一个const char[]让你拥有std::initializer_list<const char*>.
如果在另一方面你有类似的东西
auto foo = { 1, 2.0 };
Run Code Online (Sandbox Code Playgroud)
然后,由于元素类型不同,您将遇到编译器错误.
自动推导列表的自动扣除规则如下一步
auto x1 = { 1, 2 }; // decltype(x1) is std::initializer_list<int>
auto x2 = { 1, 2.0 }; // error: cannot deduce element type
auto x3{ 1, 2 }; // error: not a single element
auto x4 = { 3 }; // decltype(x4) is std::initializer_list<int>
Run Code Online (Sandbox Code Playgroud)
预期是在C++ 17之前
auto x5{ 3 };
Run Code Online (Sandbox Code Playgroud)
是std::intializer_list<int>C++ 17中的一个地方,大多数已经采用该规则的编译器被推断为int.
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |