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