4

我之前遇到了一个问题,因为没有std::. 而且诅咒仍然不时发生,因为我不使用using namespace std;.

删除 using namespace std 会导致程序得到垃圾结果

有没有办法禁用所有来自 c 的非标准函数,并且只能在命名空间下使用 c++ 函数std(而不必使用using namespace std;)?

换句话说:如果我使用sin()而不是,我想得到一个错误,而不是std::sin()这样我就不会犯那个错误。当然,不仅针对 sin,还针对与math.h.

4

2 回答 2

8

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

于 2013-10-03T12:48:54.460 回答
7

将 math.h 中的所有函数声明收集到namespace neveruse中,然后说using namespace neveruse。现在所有对 unqualified 的引用sin都是模棱两可的。

于 2013-10-03T13:13:20.460 回答