【发布时间】:2015-03-19 12:24:47
【问题描述】:
我目前在 RHEL 5.4 上安装了 gcc 4.1,但我想使用 unordered_map。正如我发现的那样,这仅在 C++11 中引入标准,因此不可用。一种替代方法是使用__gnu_cxx::hash_map,但我更喜欢使用标准。
在另一台开发主机上,我碰巧有 RHEL 6.4 和 gcc 4.4,它知道 unordered_map,但给出以下警告:
../include/c++/4.4.7/c++0x_warning.h:31:2: error: #error 此文件需要编译器和库支持即将推出的 ISO C++ 标准 C++0x。此支持目前处于试验阶段,必须使用 -std=c++0x 或 -std=gnu++0x 编译器选项启用。
从 gcc homepage 我似乎无法找出支持 unordered_map 的 gcc 版本。
[编辑] 为了澄清我的问题: 根据客户的要求,我坚持使用几个操作系统及其版本,因此我不能总是更新到最新的 GCC 版本并感到高兴。我需要保持我的软件在所有平台上的兼容性。
因此,我正在寻找使用unordered_map 所需的最低 GCC 版本。我知道向 GCC 提供 -std=c++0x 可以修复上述错误,但我不知道“实验性”警告在多大程度上意味着 我不应该使用 @ 987654329@.
this thread 中的一些人强烈建议不要使用这个实验性 C++11 实现
...那我该怎么办?
【问题讨论】:
-
你真的读过这个错误吗?尤其是最后关于编译器选项的部分。
-
是的,我确实阅读了警告,并且我完全意识到警告会随着上述选项而消失。然而,非常自然的问题是,
experimental是什么意思,如果我只想在 C++11 中使用unordered_map,这对我来说是否有任何问题。 -
没有理由为 C++11 使用 gcc 4.1。只需获取最新的版本。
-
不是我来决定应该/可以在我们的各种平台(redhat、solaris、hp-ux、aix)上使用哪个版本的 gcc,这取决于我们的客户安装和移植/迁移工作。我知道最新的当然是最好的选择,但这不可能,所以我试图找出
unordered_map所需的最低版本(我不想要也不需要整个 C++11 标准),如果有人能为我回答这个问题,我将不胜感激。 -
我赞成这个问题,因为我处于类似的情况,我被某个旧版本的 gcc 卡住了,每当我想尝试一些 C++11 功能时,我都会收到这个错误。 “实验性”吓跑了人们。当新的 -std=c++xx 尚未完成时,我希望 gcc 可以不断地和增量地为 -std=gnu++xx 包含新的语言功能。
标签: c++ c++11 gcc unordered-map