我最近在我正在审核的一些代码中找到了以下函数定义:
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
?
答案 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
是多余的。