开发者

What's the purpose of a leading "::" in a C++ method call

I've been using the Boost librarie开发者_Go百科s, and in Boost.Exception, I've noticed code like the following:

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

Just out of curiosity: what is the purpose of the leading :: before boost::throw_exception(x)?


To refer to the root namespace. This is often useful if your class or you namespace uses a name which also exists in the root, but at some point you wish to refer to the root version.

For example, if I have overloaded new in my class, but wish at some point to refer to the default (root) new, then I would use ::new to refer to root new.


To indicate this is a top level name space.

It is very similar (but not identical) to how a directory name works. Without the leading double-colon, C++ will first check if there is a namespace of that name within the current 'active' namespace. If there isn't then it will check for a namespace of the name at the top level.

With the leading double-colon, C++ will skip the first check and only look for a top-level namespace.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜