2

例如,我在对象初始化期间研究了这一点

string s = "Hello world";

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

string s("Hello world");

那是对的吗?

4

2 回答 2

7

正在做

string s = "Hello world";

相当于

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

所以构造函数采用char const*复制构造函数都被调用。但是,该标准允许复制省略,其中复制构造函数调用被省略(未完成)。

于 2012-10-22T18:34:26.293 回答
3

是和不是。两者都被调用。

string s = "Hello world";

这是复制初始化。它调用转换构造函数并构造一个临时stringfrom "Hellow world",然后将该临时构造与复制构造函数一起使用来构造s。(有待优化

string s("Hello world");

直接初始化,直接调用转换构造函数,构造s"Hello world".

于 2012-10-22T18:33:58.040 回答