2011-02-25 26 views
28

我有一些在Ubuntu上開發的代碼,現在我試圖在Windows 7上編譯它(MS VS 2010)。如何在Visual Studio中啓用C++ 0x功能? [初始化列表支持]

vector<float> tmp; 
.... 
tmp = {3.0,4.5,9.4}; 

這給了我語法錯誤

error C2143: syntax error : missing ';' before '{' 

這是因爲Visual Studio不支持這個功能嗎?或者我應該在屬性中啓用某些開關。我將「平臺工具集」屬性設置爲「v100」。

謝謝。

+3

有關當前編譯器對C++ 0x支持的參考,請查看Apache stdcxx的頁面:http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport - 只有GCC 4.4+有初始化程序列表。 – birryree 2011-02-25 19:13:22

回答

33

Visual Studio 2010 C++編譯器默認啓用C++ 0x功能。例如,使用lambdas,auto等不需要額外的開關......如果你遇到了這個錯誤,那是因爲在所有情況下它都不被支持。

編輯

基於此MSDN文章,初始化列表都沒有的6層支持的功能之一,2010年

在Visual C++編譯器在Visual Studio 2010支持六種C++ 0x核心語言功能:lambda表達式,auto關鍵字,右值引用, static_assert,nullptr和decltype

3

即使他們在那裏,這段代碼也不會工作,因爲它將一個初始化程序列表(它還不是一個向量)分配給一個名爲'tmp'的現有對象。您可以分配到的載體是這樣的:

vector<int> tmp = vector<int> {...}; // calls constructor, initializes then assigns 

std::initializer_list<int> iniList = {1,2,3,4,5,6}; 

但不

std::vector<int> tmp; 
tmp = {...}; // calls assignment operator 

順便說一句:該功能在VS2012人仍下落不明。

+1

作爲更新,現在在VS2013&g ++ 4.7.1中編譯語法「tmp = {...}」。 – 2015-02-27 02:50:24