Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 禁用std::map::at()_C++_Gcc_C++11_Map - Fatal编程技术网

C++ 禁用std::map::at()

C++ 禁用std::map::at(),c++,gcc,c++11,map,C++,Gcc,C++11,Map,我正在用gcc4.7编译一些代码,它是为c++11编写的,但我希望它与gcc4.4兼容。奇怪的是,使用std::map::at的代码似乎并没有给我带来编译错误,即使我删除了-std=c++11标志。我希望得到编译器错误,因为这段代码必须与不使用gcc4.7的同事共享。这正常吗?有什么方法可以限制std::map的行为吗 显然,使用新的gcc和新的库是不可能做到这一点的,至少不需要自己编译它们 作为一个实用的解决方案,我建议您,假设您有一台相对现代的PC 6+GB内存,或许4GB就可以了 在虚拟机

我正在用gcc4.7编译一些代码,它是为c++11编写的,但我希望它与gcc4.4兼容。奇怪的是,使用std::map::at的代码似乎并没有给我带来编译错误,即使我删除了-std=c++11标志。我希望得到编译器错误,因为这段代码必须与不使用gcc4.7的同事共享。这正常吗?有什么方法可以限制std::map的行为吗

显然,使用新的gcc和新的库是不可能做到这一点的,至少不需要自己编译它们

作为一个实用的解决方案,我建议您,假设您有一台相对现代的PC 6+GB内存,或许4GB就可以了

在虚拟机中安装旧的Linux发行版,该虚拟机既有所需的旧gcc,也有匹配的旧标准库。这比尝试在主开发操作系统中设置替代编译器和库环境要简单得多

如果您已经没有,请将源代码保存在版本控制中

或者在旧VM中设置脚本以手动签出和构建软件,或者在VM上设置脚本,并创建作业以轮询版本控制repo,并在主开发环境上提交时自动执行测试构建

这样做的好处是,您可以轻松地设置尽可能多的不同环境和操作系统,以保持与之兼容,并使主开发操作系统保持最新版本

理想世界的原始答案:一切正常:

要获得严格的C++03,请使用以下标志:

-std=c++03 -pedantic
另外,如果您只想支持gcc,您可能需要-std=g++03标准,但是除非有一些特定的特性,比如说您真正想要使用的C99样式的VLA,否则我建议您不要这样做。您永远不知道您或其他人将来可能要使用什么编译器

作为补充说明,如果您还想修复警告,也建议您这样做:-Wall-Wextra


悲伤现实看起来像选择C++标准确实没有解决问题。据我所知,这不是GCC编译器中的问题,它是GNU C++标准库中的一个问题,显然它没有用头文件中的IFDES检查所需的C++标准版本。如果它困扰你,你可以考虑归档,如果已经没有一个,虽然我没有找到一个与。< /P> < P>显然,这是不可能实现这一点与一个新的GCC和新的图书馆,至少没有编译自己。 作为一个实用的解决方案,我建议您,假设您有一台相对现代的PC 6+GB内存,或许4GB就可以了

在虚拟机中安装旧的Linux发行版,该虚拟机既有所需的旧gcc,也有匹配的旧标准库。这比尝试在主开发操作系统中设置替代编译器和库环境要简单得多

如果您已经没有,请将源代码保存在版本控制中

或者在旧VM中设置脚本以手动签出和构建软件,或者在VM上设置脚本,并创建作业以轮询版本控制repo,并在主开发环境上提交时自动执行测试构建

这样做的好处是,您可以轻松地设置尽可能多的不同环境和操作系统,以保持与之兼容,并使主开发操作系统保持最新版本

理想世界的原始答案:一切正常:

要获得严格的C++03,请使用以下标志:

-std=c++03 -pedantic
另外,如果您只想支持gcc,您可能需要-std=g++03标准,但是除非有一些特定的特性,比如说您真正想要使用的C99样式的VLA,否则我建议您不要这样做。您永远不知道您或其他人将来可能要使用什么编译器

作为补充说明,如果您还想修复警告,也建议您这样做:-Wall-Wextra


悲伤现实看起来像选择C++标准确实没有解决问题。据我所知,这不是GCC编译器中的问题,它是GNU C++标准库中的一个问题,显然它没有用头文件中的IFDES检查所需的C++标准版本。如果它困扰你,你可能会考虑如果已经没有一个,虽然我没有找到一个与。< / P >你尝试- STD=C++ 03学究?现在…它从我包含的标题中打印了很多警告,但是没有任何关于Map的内容。你有没有尝试过-std=c++03-pedantic?现在有没有。。。它从我包含的标题中打印了很多警告,但是没有关于map的任何内容。有了这个,编译器为我使用的标题提供了很多警告,但是没有关于std::map::at的任何内容。我建议进行编辑,将解决方案放在前面的答案中。。。如果你愿意,请接受它…@Shep。幸运的是,编辑建议似乎已经重新发布了


我在评论中被拒绝了,但这是一个好主意,我编辑了我自己,并把实用的解决方案放在第一位。有了这个,编译器对我正在使用的标题给了我很多警告,但对std::map::at却没有任何警告。我建议编辑,以便在回答的前面把解决方案放在第一位。。。如果你愿意,请接受它…@Shep。幸运的是,编辑建议似乎已经在评论中被拒绝了,但好主意,我编辑了自己,并把实际的解决方案放在首位。