什么时候复制构造函数被调用

时间:2012-10-22 18:32:07

标签: c++

我在对象初始化期间研究过,例如

string s = "Hello world";

如果RHS可隐式转换为LHS类型对象,则将调用Copy Constructor。但是我有一个朋友非常肯定会将char指针作为参数的构造函数被调用。但是我告诉他只有在下面的情况下调用带有char指针的构造函数

string s("Hello world");

这是对的吗?

2 个答案:

答案 0 :(得分:7)

否则

string s = "Hello world";

相当于

string s( string( "Hello world" ) );

因此调用构造函数char const* copy-constructor 。但是,该标准允许 copy-elision copy-constructor 调用 (未完成)。

答案 1 :(得分:3)

是和否。两者都被称为。

string s = "Hello world";

这是复制初始化。它调用转换构造函数并从string构造临时"Hellow world",然后将该临时值与复制构造函数一起构造s。 (受优化

string s("Hello world");

直接初始化并直接调用转化构造函数,从s构建"Hello world"