0

我在使用 {} 语法和复制构造函数时遇到了问题。根据 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

4

0 回答 0