我在对象初始化期间研究过,例如
string s = "Hello world";
如果RHS可隐式转换为LHS类型对象,则将调用Copy Constructor。但是我有一个朋友非常肯定会将char
指针作为参数的构造函数被调用。但是我告诉他只有在下面的情况下调用带有char
指针的构造函数
string s("Hello world");
这是对的吗?
答案 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"
。