1

ドキュメントでこのように定義されたメソッドがあります。

const T & QList::at(int i) const

この回答に基づいて、 次のように説明しました。

QList::at は const オブジェクト T への参照を返し、QList を変更しません。

しかし、この解釈が正しければ、変更できないはずのオブジェクトへの参照が返されます。ただし、これはエラー パスなしでコンパイルされます ( currentTime()は属性returnedStation.timeを変更します)。

T referenceToReturnedObject = myQlist.at(1);
    referenceToReturnedObject.time.currentTime();

最初の参照は何constを参照し、返された にはどのような制限がありT &ますか?

4

2 に答える 2

8

最初の const は何を参照し、返された T & にどのような制限を課しますか?

の:

T referenceToReturnedObject = myQlist.at(1);
    referenceToReturnedObject.time.currentTime();

参照によって返された値のコピーを作成し、atそのコピーを変更しています。リスト内のオブジェクトではありません。

私の解釈は正しかったのでしょうか?Qlist 内の正確なオブジェクトを変更するにはどうすればよいですか?

リストの実際のオブジェクトを変更するには、次を使用する必要があります。

T& operator[](int)

代わりは:

list[x] = y;
于 2013-10-25T12:39:44.433 に答える
5

これを行う場合:

T referenceToReturnedObject = myQlist.at(1);

referenceToReturnedObject1値から返された参照から作成されたコピーです。このコピーに対しては、何でもできます。

参照が必要な場合は、次のように言う必要があります

const T& referenceToReturnedObject = myQlist.at(1);

非 const 参照が必要な場合は、

T& referenceToReturnedObject = myQlist[1];

あるいは単に

myQlist[1].someNonConstMethod();
于 2013-10-25T12:42:32.673 に答える