强制标准名称空间的命名空间范围

Forcing Namespace Scope for Standard Namespace

本文关键字:命名空间 范围 空间 标准      更新时间:2023-10-16

我有一个快速的问题。有没有办法迫使标准名称空间具有std::示波器预选赛?类似abs,什么不;所有std功能都必须定义其范围。

我不是任何地方的using namespace std,也不是我的using std::abs或类似的东西。可能重要的是要说我包括Windows.h,我认为这可能是其中一些未指示的功能来自。

标准不禁止其他名称空间具有名为 abs的函数,仅仅是因为在 std namnespace中有名为 abs的函数。std名称空间中定义的所有其他功能都是如此。

如果您想确定使用std::abs。而不是任何其他版本的abs,然后一定要使用std::abs。然后,是否有其他版本是否有其他版本的abswindows.h标头文件中定义。

呼叫abs而不是std::abs您只是使用C

中的ABS

C 中的规则是,#include <cmath>abs的声明放在名称空间std中,并且IS 允许的也将abs的声明放在Global namespace。<<<<<<<</strong>。/p>

C 中的另一个规则是#include <math.h>abs的声明放置在全局名称空间中,并且IS 允许也将abs的声明放在命名空间std中。

所以,不,您不能假设#include <cmath>不会将abs放入全局名称空间。

此规则的原因,而不是#include <cmath>仅在std中放置名称的"明显"的原因是,如果C 实施者也无法控制C标头,则后一个规则可能令人讨厌。在这种情况下,C 标头必须对所有C功能都具有重复的声明,并且C eSters的任何更改都必须通过C 标头进行,这会产生后勤的噩梦。