QList :: at()返回对常量的引用?

时间:2013-10-25 12:37:51

标签: c++ qt

我在文档中有一个这样定义的方法。

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 &上发布了哪些限制?

2 个答案:

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