为什么'::'不像运算符那样被称为“范围分辨率运算符”?

时间:2018-07-05 19:49:47

标签: c++ scope-resolution

我无法想到使用::指定范围时会导致生成任何代码的情况。我可以想到的所有其他运算符实际上(至少在概念上)都会生成代码,“可以执行某些操作”。

所以::为什么被称为“范围分辨率运算符”,而它却丝毫不像运算符。在我看来,它似乎更像是名称的一部分,有点像...<>这样的词汇修饰符,它们围绕着模板参数列表,甚至是;。没有人称;为“表达式终止运算符”。

是否有一个特定的原因被称为(标准在某种程度上类似于操作符的行为的引用)?还是这个名字只是历史包??

3 个答案:

答案 0 :(得分:8)

但是运算符,与成员选择运算符 type一样:

.

#include <iostream>
int n;
int main()
{
    int n = 1;
    std::cout << ::n << " " << n;
}

两种情况下的输出都相同。

答案 1 :(得分:3)

使用C或C ++的运算符不需要生成代码。

不包括但不限于sizeofalignof甚至是&的某些用法的运算符(例如,用于衰减指针的类型)。

答案 2 :(得分:2)

如果您特别关注术语“作用域”,它指的是声明(定义范围)。用大括号括起来的语句块也定义了声明范围。 除非正确解析了实际范围,否则无法在其声明范围之外访问任何标识符。嵌套在未命名范围(例如,语句块)中的标识符将永远埋在其定义范围中。但是名称范围中的标识符可以通过“范围解析运算符”分别通过嵌套范围链的链接从外部进行引用。之所以称其为运算符,是因为它对2(或1)个标识符进行运算以导致编译时引用绑定。将其与创建可调用绑定的成员访问(点)运算符进行比较。 并且请不要打开诠释学的大门,我们不是在这个论坛中实践哲学。