是否有經驗法則決定何時使用舊的語法()
而不是新的語法{}
?在C++ 0x中統一初始化,何時使用()而不是{}?
要初始化一個結構:在vector
例如情況
struct myclass
{
myclass(int px, int py) : x(px), y(py) {}
private:
int x, y;
};
...
myclass object{0, 0};
現在,它有很多的構造函數。每當我做到以下幾點:
vector<double> numbers{10};
我得到元素的矢量,而不是一個與元素作爲一個構造函數是:
explicit vector (size_type n, const T& value= T(), const Allocator& = Allocator());
我懷疑的是,每當類定義了一個構造函數,就像在矢量的情況下一樣,它將被調用,語法爲{}
。
所以,我在想什麼是正確的。即只有當一個類定義了一個初始化列表構造函數來調用不同的構造函數時,我才應該回到舊的語法嗎?例如糾正上面的代碼:
vector<double> numbers(10); // 10 elements instead of just one element with value=10
這是否意味着在添加初始化程序列表構造函數時可以破壞類客戶端?哎喲。 – 2009-12-08 00:23:00
不,初始化器構造函數不會影響AFAIK中的其他構造函數。 – 2009-12-08 01:22:43
@dribeas:這是確定的。假設你的類最初有一個構造函數,它接受一個int參數,並且你很樂意用新的語法創建實例。如果一個新的構造函數被添加了'initializer_list',那麼現在所有這些對象都不會使用添加的構造函數嗎?除非網絡上的例子過時,並且聲明一個帶有列表的向量實際上應該看起來像'vector v {{2,1}};'我沒有看到括號會在任何地方出現。 –
UncleBens
2009-12-08 14:15:35