gpt4 book ai didi

c++ - 有没有办法确保代码只使用来自 std 的名称,而不是全局 namespace ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:25 24 4
gpt4 key购买 nike

当使用格式为 <cname> 的 header 时, 一个实现会将名字放入 std命名空间。而且它可能也将名称放入全局命名空间中,如描述的那样here :

[ Example: The header <cstdlib> assuredly provides its declarations and definitions within the namespace std. It may also provide these names within the global namespace. [...] — end example ]

是否有(可能依赖于编译器)规避/禁用此行为的方法(我愿意接受任何棘手的解决方案)?我想使用来自 std 的名字仅,并且我希望在使用来自全局命名空间的名称时出现错误/警告:

#include <cmath>

double a = cos(0.5); // I'd like to have an error here, because std:: is missing

原因:

  • 很难编写可移植代码,如果它可能使用来自全局命名空间的名称,因为这些名称在其他编译器中可能不可用。使用 std 中的所有内容要干净得多, 并且根本不使用全局命名空间
  • cos(0.5f) std:: 做不同的事情是否有前缀(float vs double 结果)。

最佳答案

因为棘手的解决方案很好......

使用 C++ 解析器,例如Clang,并编写一个工具来解析头文件,收集所有函数定义,然后将该集合与所有定义和调用全局函数进行比较。

当然,它也会选择有人定义或调用与标准函数同名的函数的情况,但您可能还是希望避免这种情况。

关于c++ - 有没有办法确保代码只使用来自 std 的名称,而不是全局 namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56912585/

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