2017-01-18 79 views
0

一段時間以來,我用C++ 11統一初始化語法{}來初始化我所有的變量。std :: initializer_list <T>作爲構造函數參數和統一初始化語法

現在我想初始化QVector<int>具有特定大小,所以我需要調用QVector(int size)構造(DOC here)。

然而,QVector還具有以下的構造: QVector(std::initializer_list<T> args)

所以,當我初始化我的變量是這樣的:QVector<int> foo{ 100 };,它不具有大小的元素初始化我QVector,而是調用其它構造,其構造一個QVector 用的值一個元件3210

我怎樣才能調用QVector(int size)構造函數但仍然使用統一初始化語法

+0

你應該看看可用的類型的構造函數。我只是檢查和'內聯QVector(std :: initializer_list args);'似乎是支持語法的唯一構造函數。現在試着瞭解它的功能。什麼是'std :: initializer_list '?它看起來是通過一些T型值的方式? – AlexanderVX

回答

1

你正在嘗試做不可能的事情。獲得具有特定尺寸的構造,唯一的方法是使用()括號:

QVector<int> v(100); 

的原因是,否則會引起歧義。編譯器不會知道什麼是

QVector<int> v{100}; 

因爲它是現在完成時,它總是知道這是初始化列表,即插入的100 1元,而不是100個默認元素。

注意,這不是Qt特有的,在STL中這種工作方式是一樣的。

相關問題