我无法想到使用::
指定范围时会导致生成任何代码的情况。我可以想到的所有其他运算符实际上(至少在概念上)都会生成代码,“可以执行某些操作”。
所以::
为什么被称为“范围分辨率运算符”,而它却丝毫不像运算符。在我看来,它似乎更像是名称的一部分,有点像...
或<
和>
这样的词汇修饰符,它们围绕着模板参数列表,甚至是;
。没有人称;
为“表达式终止运算符”。
是否有一个特定的原因被称为(标准在某种程度上类似于操作符的行为的引用)?还是这个名字只是历史包??
答案 0 :(得分:8)
但是是运算符,与成员选择运算符 type
一样:
.
和
#include <iostream>
int n;
int main()
{
int n = 1;
std::cout << ::n << " " << n;
}
两种情况下的输出都相同。
答案 1 :(得分:3)
使用C或C ++的运算符不需要生成代码。
不包括但不限于sizeof
,alignof
甚至是&的某些用法的运算符(例如,用于衰减指针的类型)。
答案 2 :(得分:2)
如果您特别关注术语“作用域”,它指的是声明(定义范围)。用大括号括起来的语句块也定义了声明范围。 除非正确解析了实际范围,否则无法在其声明范围之外访问任何标识符。嵌套在未命名范围(例如,语句块)中的标识符将永远埋在其定义范围中。但是名称范围中的标识符可以通过“范围解析运算符”分别通过嵌套范围链的链接从外部进行引用。之所以称其为运算符,是因为它对2(或1)个标识符进行运算以导致编译时引用绑定。将其与创建可调用绑定的成员访问(点)运算符进行比较。 并且请不要打开诠释学的大门,我们不是在这个论坛中实践哲学。