leg*_*s2k 0 c++ initializer-list c++11
#include <iostream>
#include <string>
int main(int argc, char *argv[])
{
std::string s = {123};
std::cout << s << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
为什么这个程序打印{为输出?它只是打印前面的词法分析器中的错误{吗?
我用g ++ 4.8.1编译了这个(没有错误或警告).MSVC不会编译这种string不是聚合类型的抱怨.
您是列表初始化一个包含字符数组的字符串.123是ASCII码{.没有编译器错误.
您正在调用的构造函数是initalizer-list构造函数std::string(参见此处参考),如C++ 11标准的第21.4.2/15节所述:
Run Code Online (Sandbox Code Playgroud)basic_string(std::initializer_list<CharT> init, const Allocator& alloc = Allocator());效果:与...相同
basic_string(il.begin(), il.end(), a).
MSVC不支持列表初始化,这就是为什么您收到的消息抱怨string不是聚合的事实.