对直接初始化和复制初始化感到困惑

时间:2013-04-25 08:10:19

标签: c++ initialization

我对以下概念感到困惑:

string str="123";

有些书说:使用“=”是复制初始化,

但有些文章说:string str="123"string str("123")相同。毫无疑问,str(“123”)是直接初始化的。

那么string str="123";的样式是什么?

如何判断复制初始化或直接初始化?

2 个答案:

答案 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才有可能。