在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而不适用于字符串?
答案 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();
对于字符串来说情况相似,尽管您还可以根据初始化期间提供的参数选择不同的构造函数。