之前我遇到了一个问题,因为函数在没有std::
的情况下被重载了。诅咒仍然时不时发生,因为我没有使用using namespace std;
。
Removing using namespace std causes the program to get crap results
有没有办法禁用所有来自c的非std函数,只能在命名空间std
下使用c ++函数(不必使用using namespace std;
)?
换句话说:如果我使用sin()
而不是std::sin()
,我想要收到错误,这样我就不会犯这个错误。 c
所以,不仅是罪,而且是与math.h
发生冲突的每一个功能。
答案 0 :(得分:8)
不幸的是,没有办法做到这一点。规则是#include <math.h>
将所有名称放入全局名称空间,并且还允许将它们放入std::
。同样,#include <cmath>
将所有名称放入std::
,并允许将它们放入全局名称空间。允许无关名称空间的原因很简单,纯版本通常无法实现,无需对现有库进行大手术,甚至可能不受C ++编译器人员的控制。
答案 1 :(得分:7)
将math.h中的所有函数声明收集到namespace neveruse
中,然后说using namespace neveruse
。现在,所有对不合格sin
的引用都不明确。