gpt4 book ai didi

c++ - 禁用 std::map::at()

转载 作者:行者123 更新时间:2023-11-30 01:56:22 26 4
gpt4 key购买 nike

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

最佳答案

显然,使用新的 gcc 和新的库不可能实现这一点,至少在不自己编译它们的情况下是不可能的。

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

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

  2. 如果您还没有,请将您的源代码保存在版本控制中。

  3. 要么在旧 VM 中设置一个脚本以手动检查和构建软件,要么更进一步,设置一个 Jenkins在 VM 上,并创建一个作业来轮询您的版本控制存储库,并在您在主开发环境中提交时自动进行测试构建。

这样做的好处是,您可以轻松设置任意数量的不同环境和操作系统以保持兼容性,并仍然使主要开发操作系统保持最新版本。


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

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

-std=c++03 -pedantic

此外,如果您只想支持 gcc,您可能需要 -std=g++03 “标准”,但除非有一些特定的功能,说 C99 风格的 VLA,你真的想使用它,那么我建议不要这样做。您永远不知道您或其他人将来可能想要使用哪种编译器。

作为旁注,也推荐(至少如果你也想修复警告):-Wall -Wextra


悲哀的现实 看来选择C++标准确实不能解决问题。据我所知,这在 gcc 编译器中并不是真正的问题,它是 GNU C++ 标准库中的问题,它显然不检查所需的 C++ 标准版本(使用 #ifdef 在头文件中)。如果它困扰你,你可以考虑申请 a bug report (如果已经没有,虽然我没有找到 a quick search )。

关于c++ - 禁用 std::map::at(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19866316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com