(我知道范围解析运算符的作用,以及如何以及何时使用它。)
为什么 C++ 有 ::
运算符,而不是为此目的使用 .
运算符? Java 没有单独的运算符,并且工作正常。 C++ 和 Java 之间是否存在某些差异,这意味着 C++ 需要单独的运算符才能进行解析?
我唯一的猜测是 ::
是出于优先原因而需要的,但我想不出为什么它需要比 .
更高的优先级。我能想到的唯一情况就是这样
a.b::c;
将被解析为
a.(b::c);
,但我想不出像这样的语法在任何情况下都是合法的。
也许这只是“他们做不同的事情,所以他们看起来也不同”的例子。但这并不能解释为什么 ::
比 .
具有更高的优先级。
最佳答案
因为 C++ 标准委员会中有人认为允许此代码运行是个好主意:
struct foo
{
int blah;
};
struct thingy
{
int data;
};
struct bar : public foo
{
thingy foo;
};
int main()
{
bar test;
test.foo.data = 5;
test.foo::blah = 10;
return 0;
}
基本上,它允许成员变量和派生类类型具有相同的名称。当有人认为这很重要时,我不知道他们在抽什么。但它就在那里。
当编译器看到.
时,它知道左边的东西一定是一个对象。当它看到 ::
时,它必须是类型名或 namespace (或什么都不是,表示全局 namespace )。这就是它解决这种歧义的方式。
关于c++ - 为什么 C++ 需要作用域解析运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49055070/