混淆直接初始化和复制初始化
我很困惑,接着概念:混淆直接初始化和复制初始化
string str="123";
有的书说:使用“=”是拷贝初始化,
但有些文章说:string str="123"
是一样的string str("123")
。毫无疑问,str(“123”)是直接初始化的。
那么哪种款式适合string str="123";
?
如何判断哪些是复制初始化或直接初始化?
是的,这就是所谓的复制初始化。
相反默认构造STR,然后使用string(const char*)
构建另一个string
从"123"
然后,指派两个字符串的,编译器只是构造一个使用字符串的字符串(常量字符*)用“123”。
string str="123"
与string str("123")
相同。毫无疑问 STR(“123”)直接初始
然而记得是可能的,只有对应的构造是不explicit。
它只是语法的问题:
T x = y;
是副本初始化和T x(y);
是直接初始化。
对于任何类型的T
都是如此。具体发生什么取决于哪种类型的T
。对于原始类型(例如int
s),两者完全相同。对于类类型(例如std::string
),两者实际上是相同的,尽管复制初始化要求复制构造函数是可访问的和非显式的(尽管在实践中实际上不会调用它)。
是与str拷贝构造函数相关的字符串str =“123”并被称为复制初始? – jiafu 2013-04-25 08:37:57
@家福:语法形式是“复制初始化”。它会导致一个调用,转换构造函数,但是,它需要一个'char const *'。原则上,可能有两个*构造函数调用,转换后跟着复制,但第二个调用通常是被忽略的。 – 2013-04-25 08:40:15
这一切都取决于你的编写代码的风格。 – plsgogame 2013-04-25 08:13:38
请参阅[copy initianization](http://www.gotw.ca/gotw/036.htm)。 – juanchopanza 2013-04-25 08:21:31
你的意思是说,使用'='是复制初始? – jiafu 2013-04-25 08:22:11