我对以下概念感到困惑:
string str="123";
有些书说:使用“=”是复制初始化,
但有些文章说: string str="123"与string str("123"). 毫无疑问 str("123") 是直接初始化。
那么适合哪种风格string str="123";呢?
如何判断是复制初始化还是直接初始化?
我对以下概念感到困惑:
string str="123";
有些书说:使用“=”是复制初始化,
但有些文章说: string str="123"与string str("123"). 毫无疑问 str("123") 是直接初始化。
那么适合哪种风格string str="123";呢?
如何判断是复制初始化还是直接初始化?
这只是语法问题:
T x = y;是复制初始化,并且
T x(y);是直接初始化。
这适用于任何类型T。究竟会发生什么取决于类型T是什么。对于原始类型(例如ints),两者完全相同。对于类类型(例如std::string),两者实际上是相同的,尽管复制初始化要求复制构造函数是可访问的且非显式的(尽管实际上不会调用它)。
是的,这称为复制初始化。
编译器不是默认构造 str ,然后string通过"123"使用string(const char*)然后分配两个字符串来构造另一个,而是使用带有“123”的 string(const char*) 构造一个字符串。
string str="123"与 相同string str("123")。毫无疑问 str("123") 是直接初始
但是请记住,只有在相应的构造函数不是显式的情况下才有可能。