在多数情况下,各个初始化方式之间可以相互等价的使用,不过也存在一些特例,总结如下:
1、使用拷贝初始化(使用“=”),只能提供一个初始值:
string s5 = "hello"; // 拷贝初始化
string s6 ("hello"); // 直接初始化
string s7 (10, 'c'); // 直接初始化, s7的内容是cccccccccc
2、如果提供的是一个类内初始值,则只能使用拷贝初始化或使用花括号的形式初始化:
struct Sales_data {
std::string bookNo;
unsigned units_sold = 0;
double revenue = 0.0;
};
3、如果提供的是初始元素值的列表,则只能把初始值都放在花括号里进行列表初始化,而不能放在圆括号里:
vector<string> v1{"a", "an", "the"}; // 列表初始化
vector<string> v2("a", "an", "the"); // 错误