9

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

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?

4

3 回答 3

15

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

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

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

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

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

于 2013-04-03T08:17:54.807 回答
6

它被解析为

const ::std::string& str

where::std::string是一种有效的引用方式std::string

于 2013-04-03T08:17:52.823 回答
4

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

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

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

于 2013-04-03T08:18:08.133 回答