首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >const的奇怪用法--为什么要编译?

const的奇怪用法--为什么要编译?
EN

Stack Overflow用户
提问于 2013-04-03 16:16:31
回答 3查看 252关注 0票数 9

我最近在我正在查看的一些代码中发现了以下函数定义:

代码语言:javascript
复制
void func( const::std::string& str )
{
    // Do something...
}

令我惊讶的是,const::std::string看起来是合法的(它是用GCC4.4、GCC 4.8、Clang3.2和英特尔13.0.1编译的)。

该标准是否指定可以将const用作namespace

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-03 16:17:55

标准是否指定const可以用作命名空间?

不,它不是,因为它不可能。

您的代码与以下代码相同:

代码语言:javascript
复制
void func( const ::std::string& str );

第一个作用域解析操作符表示全局名称空间。

票数 15
EN

Stack Overflow用户

发布于 2013-04-03 16:17:53

它被解析为

代码语言:javascript
复制
const ::std::string& str

其中,::std::string是引用std::string的有效方式。

票数 6
EN

Stack Overflow用户

发布于 2013-04-03 16:18:08

这是因为语法的计算结果如下:

代码语言:javascript
复制
void func( const ::std::string& str )

这意味着std是在全局范围内声明的。在这种情况下,在std之前添加额外的::是多余的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15782143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档