使用qreal引用作为参数的语法

时间:2012-10-10 16:50:27

标签: c++ qt reference parameters

我正在使用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());

为什么将对象而不是对象的引用发送到需要引用对象的方法呢?我很困惑,因为使用纯指针这样做非常清楚。

1 个答案:

答案 0 :(得分:1)

将'value'传递给:

aManipulation(qreal& value)
{
}

说:

qreal myreal = 1.2;
aManimulation(myreal);

编译器实际上将引用传递给myreal,没有必要说'myreal&' (事实上​​,你不能)。

传递指针可能看起来更清晰,但参考方法更安全。您仍然可以将地址传递给某些东西 - 而不是整个东西 - 而不会有指针被修改的风险。

我认为代码也更干净。你没有所有'*'或者需要将'const'放在正确的位置以保持指针不被修改,同时仍然允许它指向它。

当我查看我的旧代码并且所有指针都被传递时,它对我来说看起来很难看,但那是主观的。当然,有时你实际上想要传递指针(或指针指针)。