这些初始化类型之间有什么区别?

时间:2020-04-11 19:29:18

标签: c++ variables constructor initialization declaration

在c ++中,我可以通过几种方式创建和初始化变量:

int x = 0;
int x(0);
int x = int(0);
int x = int(); // same as zero

但是例如在声明此类非原始数据类型时,会出现某种错误。

string s = "";
string s("");
string s = string("");
string s = string(); // gives an error

这些初始化类型之间有什么区别?为什么最后一个类型适用于int而不适用于字符串?

1 个答案:

答案 0 :(得分:1)

它们在功能上是等效的。 这是一个包含详细信息https://en.cppreference.com/w/cpp/language/initialization

的漂亮页面
int x(0); // direct initialization

// These three are copy initialization with copy elision
int x = 0;
int x = int(0);
int x = int();

/// not initialization!!! declaration of function
int x();

对于字符串来说情况相似,尽管您还可以根据初始化期间提供的参数选择不同的构造函数。