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

mar*_*ark 9 c++ gcc

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

void func( const::std::string& str )
{
    // Do something...
}
Run Code Online (Sandbox Code Playgroud)

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

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

jro*_*rok 15

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

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

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

void func( const ::std::string& str );
Run Code Online (Sandbox Code Playgroud)

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


NPE*_*NPE 6

它被解析为

const ::std::string& str
Run Code Online (Sandbox Code Playgroud)

哪里::std::string是有效的参考方式std::string.