我对以下概念感到困惑:
string str="123";
有些书说:使用“=”是复制初始化,
但有些文章说:string str="123"
与string str("123")
相同。毫无疑问,str(“123”)是直接初始化的。
那么string str="123";
的样式是什么?
如何判断复制初始化或直接初始化?
答案 0 :(得分:4)
这只是语法的问题:
T x = y;
是复制初始化,
T x(y);
直接初始化。
对于任何类型T
都是如此。究竟发生了什么取决于T
的类型。对于原始类型(例如int
s),两者完全相同。对于类类型(例如std::string
),两者实际上是相同的,尽管复制初始化要求复制构造函数可访问且非显式(尽管实际上不会实际调用它)。 / p>
答案 1 :(得分:0)
是的,称为复制初始化。
而不是默认构造str然后使用string
从"123"
构造另一个string(const char*)
,然后分配两个字符串,编译器只使用string(const char *)构造一个字符串“123”。
string str="123"
与string str("123")
相同。毫无疑问 str(“123”)是直接初始
但请记住,只有相应的构造函数不是explicit才有可能。