2

我对以下概念感到困惑:

string str="123";

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

但有些文章说: string str="123"string str("123"). 毫无疑问 str("123") 是直接初始化。

那么适合哪种风格string str="123";呢?

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

4

2 回答 2

4

这只是语法问题:

  • T x = y;复制初始化,并且

  • T x(y);直接初始化

这适用于任何类型T。究竟会发生什么取决于类型T是什么。对于原始类型(例如ints),两者完全相同。对于类类型(例如std::string),两者实际上是相同的,尽管复制初始化要求复制构造函数是可访问的且非显式的(尽管实际上不会调用它)。

于 2013-04-25T08:33:51.923 回答
0

是的,这称为复制初始化。

编译器不是默认构造 str ,然后string通过"123"使用string(const char*)然后分配两个字符串来构造另一个,而是使用带有“123”的 string(const char*) 构造一个字符串。

string str="123"与 相同string str("123")。毫无疑问 str("123") 是直接初始

但是请记住,只有在相应的构造函数不是显式的情况下才有可能。

于 2013-04-25T08:28:49.150 回答