在Chrome V8 Engine Source中,它意味着什么?

时间:2017-12-07 01:01:54

标签: c++ v8

我在下面的代码中有一个问题。

#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

1 个答案:

答案 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