C++中初始化方式的幾點特殊情況
在多數情況下,各個初始化方式之間可以相互等價的使用,不過也存在一些特例,總結如下:
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"); // 錯誤