关于c ++:没有范围的范围解析运算符

关于c ++:没有范围的范围解析运算符

scope resolution operator without a scope

在C ++中,在没有范围的情况下使用范围解析运算符的目的是什么? 例如:

1
::foo();

它意味着全球范围。如果在同一范围内存在冲突的函数或变量,并且需要使用全局函数或变量,则可能需要使用此运算符。你可能有类似的东西:

1
2
3
4
5
6
void bar();    // this is a global function

class foo {
    void some_func() { ::bar(); }    // this function is calling the global bar() and not the class version
    void bar();                      // this is a class member
};

如果需要从类成员函数中调用全局bar()函数,则应使用:: bar()来获取函数的全局版本。


此外,您应该注意,名称解析在重载解析之前发生。因此,如果当前范围中存在具有相同名称的内容,则它将停止查找其他名称并尝试使用它们。

1
2
3
4
5
6
void bar() {};
class foo {
    void bar(int) {};
    void foobar() { bar(); } // won't compile needs ::bar()
    void foobar(int i) { bar(i); } // ok
}


在全局命名空间中查找以范围解析运算符(::)开头的名称。我们可以通过查看草案C ++标准部分3.4.3合格名称查找第4段来看到(强调我的):

A name prefixed by the unary scope operator :: (5.1) is looked up in global scope, in the translation unit where it is used. The name shall be declared in global namespace scope or shall be a name whose declaration is visible in global scope because of a using-directive (3.4.3.2). The use of :: allows a global name to be referred to even if its identifier has been hidden (3.3.10).

作为标准状态,这允许我们使用否则将被隐藏的全局命名空间中的名称,链接文档中的示例如下所示:

1
2
3
4
5
6
7
8
int count = 0;

int main(void) {
  int count = 0;
  ::count = 1;  // set global count to 1
  count = 2;    // set local count to 2
  return 0;
}

措辞非常相似,可以追溯到N1804,这是最早的标准草案。


如果在本地范围内已有一个名为foo()的函数,但需要访问全局范围内的函数。


我的c ++很生疏,但我相信如果你在本地范围内声明了一个函数,比如foo()和一个全局范围的函数,foo()就指的是本地函数。 :: foo()将引用全局的。


指的是全球范围


推荐阅读

    linux命令和库函数?

    linux命令和库函数?,系统,标准,管理,地址,服务,库函数,环境,平台,第一,状态,1

    linux变量释放命令?

    linux变量释放命令?,系统,环境,名称,工具,官网,简介,变量,环境变量,命令,内

    linux查看函数命令?

    linux查看函数命令?,系统,信息,名称,命令,位置,情况,公用,名字,标准,资料,lin

    linux调出变量的命令?

    linux调出变量的命令?,系统,工作,工具,信息,地址,代码,标准,名称,官网,命令,l

    linux命令主机名变量?

    linux命令主机名变量?,系统,主机名,查询系统,命令,终端,编辑,提示符,根目

    调用函数命令linux?

    调用函数命令linux?,系统,管理,网络,通用,统一,观察,地址,代码,设备,地方,怎

    linux变量是一个命令?

    linux变量是一个命令?,系统,信息,变量,名称,官网,地址,环境,代码,地方,命令,$

    linux中变量取余命令?

    linux中变量取余命令?,地址,工作,系统,数据,信息,命令,分析,目录,控制台,文

    linux查询函数命令?

    linux查询函数命令?,系统,信息,名称,标准,函数,百度,代码,名字,最新,实时,Lin

    加载变量的linux命令?

    加载变量的linux命令?,工具,系统,名称,环境变量,环境,命令,用户,文件,变量,

    linux变量赋值命令?

    linux变量赋值命令?,标准,数据,数字,时间,系统,名称,变量,赋值,代码,环境,lin

    linux设置变量的命令?

    linux设置变量的命令?,工具,环境变量,系统,环境,命令,方法,终端,文件,路径,

    linux命令替换变量值?

    linux命令替换变量值?,系统,档案,密码,位置,情况,发行,命令,变量,脚本,内容,L

    anaconda环境变量配置?

    anaconda环境变量配置?,环境,系统,工具,管理系统,管理,信息,名称,环境变量

    Python有哪些常用函数?

    Python有哪些常用函数?,数据,函数,地址,数字,培训,工作,网络,位置,字符串,字

    Python的变量和常量

    Python的变量和常量,状态,概念,数字,变量,代码,老板,培训,公司,等级,明年,一