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();

您正在创建由引用返回的值的副本atfrom并且您正在修改该副本。不是列表中的对象。

所以我的解释是正确的?我该如何更改 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);

如果你想要一个非常量引用,

T& referenceToReturnedObject = myQlist[1];

要不就

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