我正在使用Qt和C ++,我似乎并不理解那些与我不一致的东西。
我有一个方法来操作作为参数发送给它的变量,这里是它的声明aManipulation(qreal& a); //reference to a qreal
我使用包含两个qreal值的QPointF
。该类可以通过方法返回一个qreal值,或者参考qreal&通过另一种方法。所以我对这些案件感到好奇:
qreal value = 1;
QPointF point; point.setX(1);
//OK -- this works eventhough I don't send it as a qreal&
aManipulation(value);
//FAIL -- actually trying to send a qreal& reference is an error
aManipulation(value&);
//OK -- this method however returns a qreal&
aManipulation(point.rx());
//FAIL -- this just returns the '1' and I understand it cannot be referenced
aManipulation(point.x());
为什么将对象而不是对象的引用发送到需要引用对象的方法呢?我很困惑,因为使用纯指针这样做非常清楚。
答案 0 :(得分:1)
将'value'传递给:
aManipulation(qreal& value)
{
}
说:
qreal myreal = 1.2;
aManimulation(myreal);
编译器实际上将引用传递给myreal,没有必要说'myreal&' (事实上,你不能)。
传递指针可能看起来更清晰,但参考方法更安全。您仍然可以将地址传递给某些东西 - 而不是整个东西 - 而不会有指针被修改的风险。
我认为代码也更干净。你没有所有'*'或者需要将'const'放在正确的位置以保持指针不被修改,同时仍然允许它指向它。
当我查看我的旧代码并且所有指针都被传递时,它对我来说看起来很难看,但那是主观的。当然,有时你实际上想要传递指针(或指针指针)。