2012-09-29 37 views
24

可能重複:
C++11 features in Visual Studio 2012初始化程序列表與Visual Studio 2012中的矢量無法使用?

所以我對C++ 11名初始化列表今天通過Wikipedia讀頭,看到C++ 11支持的標準集裝箱的語法如下:

std::vector<std::string> v = { "xyzzy", "plugh", "abracadabra" }; 
std::vector<std::string> v({ "xyzzy", "plugh", "abracadabra" }); 
std::vector<std::string> v{ "xyzzy", "plugh", "abracadabra" }; 

當我在Visual Studio 2012中嘗試以下操作時,出現編譯錯誤C2552: 'vecs' : non-aggregates cannot be initialized with initializer list

這裏是我的代碼:

#include <vector> 

using namespace std; 

int main() { 
    vector<string> vecs = {"h", "g", "e"}; 
} 

不VS2012不支持初始化列表還是我只是誤解的東西?

謝謝!

+15

然而,我在SO上提出一個問題比閱讀一些MSDN文章糟糕得多的問題要快得多。我想我下次不應該發佈到SO。 – Polaris878

+3

我同意Polaris。 MSDN憤怒我。 – Marlon

回答

38

Visual Studio 2012不支持初始化程序列表。

那麼,它直到2012年11月CTP。現在它至少在alpha狀態下。當然,這段代碼仍然無法使用,因爲它們仍將初始化程序列表放入標準庫本身。

+2

感謝尼科爾,這裏是一個相當不錯的表格,描述了VS2012支持的功能列表:http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx – Polaris878

+1

雖然支持是非常殘酷的。 'int main(){for(int i:{1,2,3,4,5}){}}'給出了一個內部編譯器錯誤。實際上,前CTP之一崩潰。 CTP只缺少初始化列表的開始/結束函數。 – dascandy

+0

@dascandy:是的。這是缺乏對初始化列表的標準庫支持的一部分:沒有對std :: begin和std :: end進行適當的重載,這是基於'for'的基於範圍的。 –