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

时间:2010-01-12 23:56:32

标签: c++ boost

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

#define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x)

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

2 个答案:

答案 0 :(得分:38)

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

例如,如果我在课程中重载new,但希望在某个时候引用默认(root)new,那么我会使用::new来引用root new。

答案 1 :(得分:27)

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

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

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