如何在 Visual Studio 中启用 C++0x 功能? [初始化列表支持]
Posted
技术标签:
【中文标题】如何在 Visual Studio 中启用 C++0x 功能? [初始化列表支持]【英文标题】:How to enable C++0x features in Visual studio? [Initializer Lists support] 【发布时间】:2011-02-25 19:09:56 【问题描述】:我有一些在 Ubuntu 上开发的代码,现在我正在尝试在 Windows 7(MS VS 2010)上编译它。
vector<float> tmp;
....
tmp = 3.0,4.5,9.4;
这给了我语法错误
error C2143: syntax error : missing ';' before ''
这是因为 Visual Studio 不支持此功能吗?或者我应该在属性中启用一些开关。我将“平台工具集”属性设置为“v100”。
谢谢。
【问题讨论】:
有关当前编译器中 C++0x 支持的参考,请查看 Apache stdcxx 的页面:wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport - 只有 GCC 4.4+ 有初始化列表。 【参考方案1】:Visual Studio 2010 C++ 编译器默认启用 C++0x 功能。例如,使用 lambdas、auto
等不需要额外的开关……如果您遇到该错误,那是因为它很可能不受支持。
编辑
根据这篇 MSDN 文章,初始化列表不是 2010 年支持的 6 个功能之一
http://msdn.microsoft.com/en-us/magazine/ee336130.aspxVisual Studio 2010 中的 Visual C++ 编译器支持六种 C++0x 核心语言功能:lambda 表达式、auto 关键字、右值引用、static_assert、nullptr 和 decltype
【讨论】:
【参考方案2】:Visual Studio 2010 不支持初始化列表。 查看 here 以了解 Visual Studio 2010 中支持的 C++0x 功能
Visual Studio 2012 也不支持它们。 您可以找到在 Visual Studio 2012 / VS11 here 和 here 中实现的 C++11 功能。
初始化列表的第一个实现在Visual C++ Compiler November 2012 CTP中可用。
initializer lists will be in Visual Studio 2013 的第一个真正版本。
【讨论】:
可惜VS2010不支持。【参考方案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 中仍然缺少该功能。
【讨论】:
作为更新,语法“tmp = ...”现在可以在 VS2013 & g++ 4.7.1 中编译。以上是关于如何在 Visual Studio 中启用 C++0x 功能? [初始化列表支持]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2015 隔离外壳中启用PrivateGalleries
如何在 Visual Studio 2017 中启用 WiX 项目
如何在 Visual Studio 2017 中启用 TFS 跟踪
如何在 Visual Studio 中启用 NuGet 包还原?