我想不出使用::
指定范围会导致生成任何代码的情况。我能想到的每个其他运算符实际上(至少在概念上)都会生成代码,它“做某事”。
那么,当它的行为与 operator 完全不同时,为什么将其::
称为“范围解析运算符” 。在我看来,它更像是名称的一部分,有点像或围绕模板参数列表的词汇绒毛,甚至. 没有人称“表达式终止运算符”。...
<
>
;
;
是否有特定的原因被称为(标准中关于它如何以某种方式表现得像这里的操作员一样的引用)?或者这个名字只是历史包袱?
我想不出使用::
指定范围会导致生成任何代码的情况。我能想到的每个其他运算符实际上(至少在概念上)都会生成代码,它“做某事”。
那么,当它的行为与 operator 完全不同时,为什么将其::
称为“范围解析运算符” 。在我看来,它更像是名称的一部分,有点像或围绕模板参数列表的词汇绒毛,甚至. 没有人称“表达式终止运算符”。...
<
>
;
;
是否有特定的原因被称为(标准中关于它如何以某种方式表现得像这里的操作员一样的引用)?或者这个名字只是历史包袱?
但它是一个运算符,就像成员选择运算符 .
一样:
#include <iostream>
int n;
int main()
{
int n = 1;
std::cout << ::n << " " << n;
}
和
#include <iostream>
struct N {
int n = 1;
operator int() const {return 0;}
};
int main()
{
N n;
std::cout << n << " " << n.n;
}
两种情况下的输出是相同的。
生成代码不需要 C 或 C++ 中的运算符。不包括但不限于 , 的运算符,sizeof
甚至alignof
是 & 的某些用法(例如用于衰减为指针的类型)。
如果您特别关注“范围”一词,它指的是声明(定义范围)。一个语句块——用花括号括起来——也定义了一个声明范围。除非正确解析实际范围,否则不能在其声明范围之外访问标识符。嵌套在未命名范围(例如语句块)中的标识符永远埋在其定义范围中。但是名称范围内的标识符可以通过嵌套范围的链接分别从外部引用,通过“范围解析运算符”。它之所以称为运算符,是因为它对 2(或 1)个标识符进行操作以产生编译时引用绑定。将其与创建可调用绑定的成员访问(点)运算符进行比较。请不要打开通向诠释学的大门,