我在文档中有一个这样定义的方法。
const T & QList::at(int i) const
基于this answer我将其描述为:
QList :: at返回对const对象T的引用,并且不修改QList。
但是如果这种解释是正确的,它将返回对我不应该改变的对象的引用。但是编译时没有错误传递( currentTime()修改属性 returnedStation.time ):
T referenceToReturnedObject = myQlist.at(1);
referenceToReturnedObject.time.currentTime();
第一个const
引用了什么,以及它在返回的T &
上发布了哪些限制?
答案 0 :(得分:8)
第一个const引用了什么,以及它在返回的T&amp ;?上发布了什么限制?
在:
T referenceToReturnedObject = myQlist.at(1);
referenceToReturnedObject.time.currentTime();
您正在创建at
引用返回的值的副本,并且您正在修改该副本。不是列表中的对象。
所以我的解释是正确的?我如何更改Qlist中的确切对象?
为了修改列表的实际对象,您需要使用:
T& operator[](int)
代替:
list[x] = y;
答案 1 :(得分:5)
执行此操作时:
T referenceToReturnedObject = myQlist.at(1);
referenceToReturnedObject1
是从该值返回的引用制作的副本。你可以做任何你想要的副本。
如果你想要一个参考,你必须说
const T& referenceToReturnedObject = myQlist.at(1);
如果你想要一个非const引用,
T& referenceToReturnedObject = myQlist[1];
或只是
myQlist[1].someNonConstMethod();