0
#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不是聚合类型的抱怨。

4

1 回答 1

7

您正在使用字符数组对字符串进行列表初始化。123是 的ASCII 码{。没有编译器错误。

您正在调用的构造函数是 C++11 标准的第 21.4.2/15 段指定的 initalizer-list 构造函数std::string(参见此处以获取参考):

basic_string(std::initializer_list<CharT> init, 
             const Allocator& alloc = Allocator());

效果:同basic_string(il.begin(), il.end(), a)

MSVC 不支持列表初始化,这就是为什么您收到消息抱怨string不是聚合的事实。

于 2013-06-28T22:41:54.707 回答