加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C嵌套的命名空间定义,以::开头

发布时间:2020-12-16 06:50:32 所属栏目:百科 来源:网络整理
导读:在§7.3.1?1(n4527)草案中,命名空间定义的语法包含: enclosing-namespace-specifier: identifier enclosing-namespace-specifier :: identifier 这可以防止名称空间定义具有以“::”开头的标识符 namespace d{ namespace e {} }namespace ::d::e{void foo()
在§7.3.1?1(n4527)草案中,命名空间定义的语法包含:

enclosing-namespace-specifier:

identifier

enclosing-namespace-specifier :: identifier

这可以防止名称空间定义具有以“::”开头的标识符

namespace d{ namespace e {} }
namespace ::d::e
{
void foo(){}
}

这种限制有什么理由吗?

更新:
downvote(s)和一些答案使我意识到当我在第一句话中表示“草稿”时我写了“标准”.在我的辩护中,我确实在括号中写了文档编号.因此,让我强调这是关于C 1z的嵌套命名空间定义功能的问题.

解决方法

以::开头的行向编译器指示您希望使用全局命名空间.例如:

void foo()
{
  std::cout << "1" << std::endl;
}

namespace d
{
  void foo()
  {
    std::cout << "2" << std::endl;
  }

  void example()
  {
    foo();
    ::foo();
  }
}

此代码将打印出来:

2
1

第一个调用转到d :: foo(),第二个调用转到全局命名空间中的foo().因此,在命名空间的开头放一个::当你试图为它创建一个命名空间时,看起来你将d放在全局命名空间中,这实际上没有任何意义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读