在C++方法调用中,前导"::"的目的是什么?

bho*_*ood 34 c++ boost

我一直在使用Boost库,在Boost.Exception中,我注意到以下代码:

#define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x)
Run Code Online (Sandbox Code Playgroud)

出于好奇:领先::之前的目的是boost::throw_exception(x)什么?

Ale*_*own 41

引用根命名空间.如果您的类或您的命名空间使用也存在于根目录中的名称,这通常很有用,但在某些时候您希望引用根版本.

例如,如果我new在我的类中重载,但希望在某些时候引用默认(root)new,那么我将用于::new引用root new.


R S*_*hko 29

表明这是一个顶级名称空间.

它与目录名称的工作方式非常相似(但不完全相同).如果没有领先的双冒号,C++会先检查是否有当前的"活跃"的命名空间内的名字命名空间.如果没有,那么它将在顶层检查名称的命名空间.

使用前导双冒号,C++将跳过第一次检查,只查找顶​​级命名空间.