奇怪的使用const - 为什么编译?

时间:2013-04-03 08:16:31

标签: c++ gcc

我最近在我正在审核的一些代码中找到了以下函数定义:

void func( const::std::string& str )
{
    // Do something...
}

我很惊讶const::std::string似乎是合法的(它汇编了GCC4.4,GCC 4.8,Clang 3.2和Intel 13.0.1)。

标准是否指定const可用作namespace

3 个答案:

答案 0 :(得分:15)

  

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

不,它没有,因为它不可能。

您的代码与:

相同
void func( const ::std::string& str );

第一个范围解析运算符表示全局命名空间。

答案 1 :(得分:6)

它被解析为

const ::std::string& str

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

答案 2 :(得分:4)

这是编译因为语法被评估为:

void func( const ::std::string& str )

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