为什么可以在C ++中编写类似字符串s =“xxx”的表达式?

时间:2013-04-25 01:10:41

标签: c++ string implicit-conversion

我经常看到:

string str = "123";

我的问题是string是否为类类型,为什么我们可以直接将其设置为"123"而不是使用new或直接初始化它?

我习惯看到像

这样的东西
classType *pt = new classType;
classType pt = classType();

不是

classType s = value;

1 个答案:

答案 0 :(得分:9)

C ++字符串类型有一个隐式转换构造函数,它接受const char *作为输入。因此,使用C样式字符串初始化C ++字符串是合法的,因为C ++会将其解释为对隐式转换构造函数的调用。

在这种情况下,代码

string str = "123";

相当于

string str("123");

更明确地看起来像构造函数调用。

请注意,很难看到像

这样的内容
classType p = classType();

更恰当的说法就是写

classType p;

隐式调用默认的无参数构造函数。

希望这有帮助!