0

私は C++ で Qt を使用していますが、矛盾していると思われるものを理解していないようです。パラメータとして送信される変数を操作するメソッドがあります。ここにその宣言がありますaManipulation(qreal& a); //reference to a qreal

QPointF2 つの qreal 値を含む whichを使用します。クラスは、メソッドを介して 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());

オブジェクトの参照を必要とするメソッドに、オブジェクトへの参照ではなく、オブジェクトを送信するだけで十分なのはなぜですか? 純粋なポインターでこれを行うと非常に明確になるため、私は混乱しています。

4

1 に答える 1

1

「値」を次の場所に渡す場合:

aManipulation(qreal& value)
{
}

言うことによって:

qreal myreal = 1.2;
aManimulation(myreal);

コンパイラは実際に myreal への参照を渡します。'myreal&' と言う必要はありません (実際、できません)。

ポインターを渡す方が明確に見えるかもしれませんが、参照アプローチの方が安全です。ポインターが変更されるリスクなしに、何か全体ではなく、アドレスを何かに渡すという利点があります。

コードもすっきりしたと思います。すべての「*」または「const」を適切な場所に配置して、ポインターが指すものを許可しながらポインターが変更されないようにする必要はありません。

すべてのポインターが渡された古いコードを見ると、かなり醜いように見えますが、それは主観的なものです。もちろん、実際にポインター (またはポインターへのポインター) を渡したい場合もあります。

于 2012-10-10T17:02:39.640 に答える