我在使用 {} 语法和复制构造函数时遇到了问题。根据 Stroustrup 的以下代码应该可以工作(我检查了他的书,他多次做了同样的例子)但是当我尝试用 gcc 编译它时它失败了(它编译并与 clang 一起工作):
#include <iostream>
#include <string>
struct A
{
int a;
std::string s;
};
int main()
{
A a{7, "stefano"};
A b{a};
std::cout << "Hello, " << b.s << "!\n";
}
编译错误是:error: cannot convert 'A' to 'int' in initialization
显然它正在尝试使用初始化列表作为参数列表(因此尝试将 struct A 分配给 int),但根据语言规范,应该可以使用 {} 调用复制构造函数(实际上它适用于铛)。
这是gcc的特性吗?我错过了什么吗?
编辑:找到的解决方案:这似乎是标准中的一个错误,应该在 C++14 中修复(查看此处的“勘误表”部分:http: //stroustrup.com/4th.html)