多重->;和点 我刚搬到C++,不懂这些代码< /p> QVariant v1 = con->getEnd1()->getProperty(fricstr);

多重->;和点 我刚搬到C++,不懂这些代码< /p> QVariant v1 = con->getEnd1()->getProperty(fricstr);,c++,C++,或 你能解释一下这些代码中多个->和dot的含义吗 一般来说,我理解只使用一个->作为指向对象的值,或使用点作为对象的方法。但是对于multiple我不知道。x->是(*x)的缩写。(解除引用) x->y->z: x->y返回y(从x开始) y->z返回z(从y开始) 同: QVariant v1 = (con->getEnd1())->getProperty(fricstr); 也就是说,首先执行con->getEnd1()。它的计算结果是指向某个对象的指针,让我们调用中间指针p

你能解释一下这些代码中多个
->
dot
的含义吗


一般来说,我理解只使用一个
->
作为指向对象的值,或使用
作为对象的方法。但是对于multiple我不知道。

x->
(*x)的缩写。
(解除引用)

x->y->z

x->y返回y(从x开始)
y->z返回z(从y开始)

同:

QVariant v1 = (con->getEnd1())->getProperty(fricstr);
也就是说,首先执行
con->getEnd1()
。它的计算结果是指向某个对象的指针,让我们调用中间指针
p
。然后调用它的
p->getProperty(fricstr)
。它与链接任何运算符相同(例如,
1+2+3
(1+2)+3
相同)

要真正明确,它与此等效,不存储中间值:

auto&& p = con->getEnd1();
QVariant v1 = p-> getProperty(fricstr);

这同样适用于

感谢伯哈德;圆点也是一样的。例如:a.b.c;c是b的成员;b是该组织的成员a@NhuNguyen不,
c
a.b
的一个成员,如果
con->getEnd1()
返回一个类类型的对象,并带有重载的
运算符->
,那么你的代码就不是等价的Hank Claudiu,你能解释一下为什么它是从左到右而不是向后的吗?@M:。你认为现在的
auto&
是否与之相当?可能比在这里介绍
auto
更令人困惑…@Nhu-Nguyen:这是唯一有意义的方法。如果您有一个对象
a
,它有一个对象
b
,它有一个对象
c
,它有一个对象
d
,您可以使用
a.b.c.d
沿对象层次结构向下移动。如果它是从右向左的,它就相当于类似于
a.(b.(c.d))
。但是
b.(c.d)
是什么意思呢?谢谢克劳迪乌,我现在明白了“我理解
1+2
的工作原理,但不理解
1+2+3
”——还有什么不理解的呢
1+2+3
计算
1+2
,然后计算
+3
。同样地
con->getEnd1()->getProperty(fricstr)
计算
con->getEnd1()
,然后
->getProperty(fricstr)
QVariant v1 = (con->getEnd1())->getProperty(fricstr);
auto&& p = con->getEnd1();
QVariant v1 = p-> getProperty(fricstr);