使用c ++ 0x - 安全吗?

时间:2012-01-05 11:48:52

标签: c++ c++11 hashmap

我想使用stl hashmap,并且我发现c ++没有它,但是c ++ 0x确实 - 所以对于那些不是最新的人 - c ++ 0x可以安全使用? (它是否已经过全面测试,可以指望相对没有bug?)。如果是这样 - 似乎有很多新版本(c ++ 11) - 我应该使用它们,还是它们仍然不够可靠。实际上当我尝试使用新界面中的东西时,我的linux编译器告诉我必须包含c ++ 0x - 所以我想我的编译器不是最新版本

4 个答案:

答案 0 :(得分:6)

C ++ 0x是C ++ 11的工作标题。

代码info页面中查找您的编译器版本,了解其对新功能的支持。

长话短说:海湾合作委员会领先于国会,但仍然没有100%的功能。任何编译器都不支持某些事物,例如用户定义的文字。 (编辑:我不确定,但我认为正则表达式和原子内存模型的某些功能属于此类别。)rvalue引用等基本功能已广泛使用。

std::unordered_map由C ++ 03 TR1引入,并且所有C ++ 11实现以及所有现代C ++ 03实现都支持TR1库,即使没有C ++ 11语言支持。在TR1下,模板名为std::tr1::unordered_map,您可能需要采取一些特定于平台的步骤来启用TR1,例如向包含文件搜索路径添加一些tr1/子目录。

答案 1 :(得分:2)

是的,它应该是安全的。但是 - 就像你已经看到的那样 - 只有C ++ 11标准的一部分在各种编译器中实现。尝试获取最新的gcc,它实现了大多数C ++ 11功能:http://gcc.gnu.org/projects/cxx0x.html

答案 2 :(得分:1)

对于非安全关键应用程序应该是安全的。我认为还没有支持C ++ 0x的安全关键编译器。

但是,对于桌面应用程序,您应该没有问题。但请注意,只有少数编译器支持C ++ 0x(afak gcc 4.6+和VC 2010),并且它们不支持所有功能。阅读编译器规范以检查它们支持的内容以及它们不支持的内容非常重要。

我更愿意等待这些编译器的新版本在商业应用中使用它。

答案 3 :(得分:1)

没有C ++ 0x。这是2011年8月12日最终成为C ++ 11的工作名称。

标准包含许多单独起草的部分,编译器甚至在标准最终确定之前就开始单独支持它们,但另一方面,某些部分尚未得到支持。因此,您需要检查编译器是否支持您要使用的功能。

现在std::unordered_map的特定情况,它首先在C++ TR1中标准化,但在boost之前很久就会出现。大多数不支持C ++ 11的编译器都支持TR1,所以std::tr1::unordered_map会在那里,你可以随时从boost中获取它。

至于gcc,错误是您需要启用 C ++ 11。这是通过简单地将-std=c++0x选项添加到编译器命令行来完成的。这样做是为了让您不必在仍然关心C ++ 03编译器可移植性的代码中使用C ++ 11特性。