#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
不是聚合类型的抱怨。
#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
不是聚合类型的抱怨。
您正在使用字符数组对字符串进行列表初始化。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
不是聚合的事实。