我尝试使用统一初始化调用默认复制构造函数,但它无效。
例如:
g++ -std=c++11 -c Ex1.cpp
我将其编译为:Ex1.cpp: In function ‘int main()’:
Ex1.cpp:11:28: error: could not convert ‘s9’ from ‘Work’ to ‘std::string {aka std::basic_string<char>}’
Work currently_playing {s9}; // copy initialization
^
编译器出错:
Normal
没有统一的初始化工作来复制初始化对象吗?
答案 0 :(得分:3)
这是C ++ 11标准中的一个错误。 C ++ 14改变了 list-initialization 的执行方式。在C ++ 11中,如果X{X{}}
是aggregate type,X
将执行聚合初始化。 C ++ 14添加了一个额外的子句,以便此代码正确调用相应的构造函数; [dcl.init.list] /3.2:
如果T是聚合类,则初始化列表只有一个 cv U类型的元素,其中U是T或从T派生的类, object从该元素初始化(通过复制初始化) copy-list-initialization,或者直接初始化 直接一览初始化)。
来源:
http://eel.is/c++draft/dcl.init.list#3.2
http://en.cppreference.com/w/cpp/language/list_initialization#Explanation
答案 1 :(得分:2)
这是旧的g ++错误或旧的核心语言缺陷。您的代码从g ++ 5开始正确编译。我强烈建议您更新编译器,因为4.8非常旧。