这些类型的初始化有什么区别?
What is the difference between these types of initialization?
在 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 而不适用于 string?
它们在功能上是等价的。
这是一个包含详细信息的漂亮页面 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();
对于字符串情况类似,虽然你也可以根据你在初始化时给出的参数选择不同的构造函数。
在 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 而不适用于 string?
它们在功能上是等价的。 这是一个包含详细信息的漂亮页面 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();
对于字符串情况类似,虽然你也可以根据你在初始化时给出的参数选择不同的构造函数。