使用cmath时禁用math.h废话

时间:2013-10-03 12:42:43

标签: c++ c namespaces math.h cmath

之前我遇到了一个问题,因为函数在没有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发生冲突的每一个功能。

2 个答案:

答案 0 :(得分:8)

不幸的是,没有办法做到这一点。规则是#include <math.h>将所有名称放入全局名称空间,并且还允许将它们放入std::。同样,#include <cmath>将所有名称放入std::,并允许将它们放入全局名称空间。允许无关名称空间的原因很简单,纯版本通常无法实现,无需对现有库进行大手术,甚至可能不受C ++编译器人员的控制。

答案 1 :(得分:7)

将math.h中的所有函数声明收集到namespace neveruse中,然后说using namespace neveruse。现在,所有对不合格sin的引用都不明确。