我对以下概念感到困惑:
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
是什么。对于原始类型(例如int
s),两者完全相同。对于类类型(例如std::string
),两者实际上是相同的,尽管复制初始化要求复制构造函数是可访问的且非显式的(尽管实际上不会调用它)。
是的,这称为复制初始化。
编译器不是默认构造 str ,然后string
通过"123"
使用string(const char*)
然后分配两个字符串来构造另一个,而是使用带有“123”的 string(const char*) 构造一个字符串。
string str="123"
与 相同string str("123")
。毫无疑问 str("123") 是直接初始
但是请记住,只有在相应的构造函数不是显式的情况下才有可能。