在 Visual C++ 编译器中使用 std::initializer_list 2012 年 11 月 CTP

问题描述 投票:0回答:2

我想在 Visual Studio 2012 中使用

std::initializer_list
,就像 这个示例 中的人一样。我的操作系统是 Windows 8 x64。

因此我最近安装了 Visual C++ 编译器 2012 年 11 月 CTP 并且正如 Microsoft 提到的,我更改了项目的平台工具集以使用新更新的编译器。

但即使这样做之后,也没有

std::initializer_list
<initializer_list>
标头可用。但微软的链接网站告诉我(在标题“概述”下)该更新将提供初始化程序列表。我重新启动了 IDE 和 PC。我不确定这是否是由于我(遗憾地)使用德语版的 Visual Studio 而编译器更新是英语的这一事实引起的。我做错了什么?

更新:尝试编译受到 IntelliSense 批评的行

auto a = { 0 };
,编译器输出显示
'Microsoft Visual C++ Compiler Nov 2012 CTP' is for testing purposes only.
,然后编译器崩溃并出现一个错误窗口,其中显示
Microsoft (R) C/C++ Compiler Driver has stopped working
。无需任何新语法,一切都可以在所选的新编译器下编译并正常工作。

c++ visual-c++ c++11 visual-studio-2012 initializer-list
2个回答
25
投票

(我在 Microsoft 工作并与 Dinkumware 一起维护 VC 的标准库实现。)

我不确定这是否可能是由于我(遗憾地)使用德语版的 Visual Studio 而编译器更新是英文的。

不幸的是,纯英语的CTP不支持德语VS。

“编译器驱动程序”cl.exe 调用编译器前端 c1xx.dll、编译器后端 c2.dll 和链接器 link.exe。编译器驱动程序崩溃的情况非常罕见。我推测它正在尝试显示 CTP 添加的错误消息之一,但由于 CTP 没有更新德语资源,因此编译器驱动程序无法加载错误消息并继续崩溃。

请注意,这与前端或后端的内部编译器错误或恰好错误发出的正常编译器错误不同。 (CTP发布后,许多ICE和虚假错误已得到修复。)

但是即使这样做了,也没有 std::initializer_list 和 标头可用。

CTP 安装在特殊位置。 (实际上是编译团队写的。)

在命令行上,使用 CTP 并将

放在包含路径上的咒语是(假设默认位置):

"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86 set PATH=C:\Program Files (x86)\Microsoft Visual C++ Compiler Nov 2012 CTP\bin;%PATH% set INCLUDE=C:\Program Files (x86)\Microsoft Visual C++ Compiler Nov 2012 CTP\include;%INCLUDE%

尝试编译 auto a = { 0 }; 行这是被 IntelliSense 批评的

这已记录在案 - Intellisense 未由 CTP 更新,因此它不会识别任何新功能。

[rubenvb]

C++ 标准库未随编译器更新,导致您没有像样的

(这包括省略所有标准容器的大括号 init 列表构造函数)

您可能有兴趣了解我们已经更新了标准库以完全支持作用域枚举和初始值设定项列表。这包括当前工作论文 (N3485) 强制要求的所有initializer_list 重载,以及在常用位置安装

以及所有其他标准标头。 (它也是 Dinkumware 的官方副本,尽管它与编译器团队的“假”版本之间的差异主要是表面上的。)这些东西将在下一个公开版本中提供,无论何时何地。我们的下一个任务是使用显式转换运算符和可变参数模板更新标准库,取代我们脆弱的模拟。


3
投票
正如您所注意到的,11 月 CTP 的可用性非常有限,至少有两个原因:

  1. 编译器有许多导致崩溃的错误,就像您发现的那样。

  2. C++ 标准库未随编译器更新,让您没有像样的

    <tuple>

    <intializer_list>
    (这包括省略 
    all 标准容器的大括号 init 列表构造函数)

另外:链接的示例是非常丑陋的代码。如果您想使用此功能,请使用支持此语法的编译器(例如 GCC 或 Clang)。它们都适用于 Windows。通过编写额外的代码来破解尚未实现的语言功能是愚蠢的。

© www.soinside.com 2019 - 2024. All rights reserved.