如何在Visual Studio中启用C ++ 0x功能? [初始化程序列表支持]

时间:2011-02-25 19:09:57

标签: visual-studio-2010 c++11

我有一些我在Ubuntu上开发的代码,现在我正在尝试在Windows 7上编译它(MS VS 2010)。

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

这给了我语法错误

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

这是因为Visual Studio不支持此功能吗?或者我应该在属性中启用一些开关。我将“Platform Toolset”属性设置为“v100。”

谢谢。

3 个答案:

答案 0 :(得分:33)

默认情况下,Visual Studio 2010 C ++编译器上启用了C ++ 0x功能。例如,它不需要额外的开关来使用lambdas,auto等等......如果你得到那个错误,那是因为在所有情况下它都不受支持。

修改

根据此MSDN文章,初始化列表不是2010年支持的6个功能之一

  

Visual Studio 2010中的Visual C ++编译器启用了六种C ++ 0x核心语言功能:lambda表达式,auto关键字,rvalue引用,static_assert,nullptr和decltype

答案 1 :(得分:16)

Visual Studio 2010不支持初始化列表。 查看here以获取Visual Studio 2010中支持的C ++ 0x功能

Visual Studio 2012也不支持它们。 您可以找到在Visual Studio 2012 / VS11 herehere中实现的C ++ 11功能。

初始化程序列表的第一个实现位于Visual C++ Compiler November 2012 CTP

initializer lists will be in Visual Studio 2013的第一个真正版本。

答案 2 :(得分: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中的功能仍然缺失。