gpt4 book ai didi

c++ - 为什么 C++ 需要作用域解析运算符?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:05 25 4
gpt4 key购买 nike

(我知道范围解析运算符的作用,以及如何以及何时使用它。)

为什么 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com