我在下面的代码中有一个问题。
#define V8_DECLARE_ONCE(NAME) ::v8::base::OnceType NAME
在cpp文件中,'::'表示引用命名空间,但包含':: v8'的地方?
std::cout << ... << std::endl;
cout位于'std'命名空间,,,但是,在这种情况下,我不知道如何解释它。
此代码的一部分是跟随一个。
namespace v8 {
namespace base {
typedef AtomicWord OnceType;
#define V8_ONCE_INIT 0
#define V8_DECLARE_ONCE(NAME) ::v8::base::OnceType NAME
答案 0 :(得分:1)
::ns
表示查看ns
的根命名空间。它可以避免可能的命名空间冲突,因为它可以避免查找当前的命名空间,如果您定义自己的命名空间并且它具有相同的名称。这是一个展示差异的例子。
#include <iostream>
namespace v8 {
constexpr int val = 5;
} // namespace v8
namespace my {
namespace v8 {
constexpr int val = 10;
} // namespace my::v8
void some_func()
{
std::cout << ::v8::val << ", " << v8::val << '\n';
}
} // namespace my
int main()
{
my::some_func();
}
打印5, 10
。