当使用格式为<cname>
的标头时,实现会将名称放入std
命名空间中。并且{em>也可以将名称也放入全局名称空间,如here所述:
[示例:标头
肯定在名称空间std中提供其声明和定义。 它也可以在全局名称空间中提供这些名称。 [...] —示例]
是否有一种(可能依赖于编译器的)方式来规避/禁用此行为(我对任何棘手的解决方案持开放态度)?我只想使用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
与double
结果)。答案 0 :(得分:1)
因为棘手的解决方案很好...
使用C ++解析器,例如用Clang编写一个分析头文件的工具,收集所有函数定义,然后将其与所有定义进行比较并调用全局函数。
当然,它还会处理某些人定义或调用的函数与标准函数同名的情况,但是您可能还是想避免这种情况。