C++中方法调用中的双冒号"::"有什么作用?

45
我一直在使用Boost库,而在Boost.Exception中,我注意到了以下代码:
#define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x)

只是出于好奇:在boost::throw_exception(x)之前的前导::有什么目的?
2个回答

50

引用根命名空间。如果你的类或命名空间使用与根相同的名称,但在某些时候希望引用根版本,则通常会很有用。

例如,如果我在我的类中重载了new,但是希望在某个时候引用默认(根)的new,那么我将使用::new来引用根new


37

为了表示这是一个顶层命名空间。

这与目录名称的工作方式非常相似(但并非完全相同)。如果没有前导双冒号,C++将首先检查当前“活动”命名空间中是否存在该名称的命名空间。 如果不存在,则会检查顶级名称空间中是否有该名称的命名空间。

有前导双冒号时,C++将跳过第一次检查,并仅查找顶级命名空间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接