我一直在使用Boost库,在Boost.Exception中,我注意到以下代码:
#define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x)
出于好奇:::
之前领先boost::throw_exception(x)
的目的是什么?
答案 0 :(得分:38)
引用根命名空间。如果您的类或您的命名空间使用的名称也存在于根目录中,但在某些时候您希望引用根版本,这通常很有用。
例如,如果我在课程中重载new
,但希望在某个时候引用默认(root)new
,那么我会使用::new
来引用root new。
答案 1 :(得分:27)
表明这是一个顶级名称空间。
它与目录名称的工作方式非常相似(但不完全相同)。如果没有前导双冒号,C ++将首先检查当前“活动”命名空间中是否存在该名称的命名空间。如果没有,那么它将在顶层检查名称的命名空间。
使用前导双冒号,C ++将跳过第一次检查,只查找顶级命名空间。