1

所以众所周知,这段代码是不合理的:

const int foo() 
{
  int n = // do computation...;
  return n;
}

因为无论如何复制时返回“const int”是什么意思?

但是对于像 Qt 容器这样具有隐式共享 (COW) 的类,这又有意义了吗?考虑:

const QList<mytype> get_list()
{
   QList<mytype> lst;
   // do stuff to fill list;
   return lst;
}

现在我可以这样做:

   const QList<mytype> mylst = get_list();

由于Qt对容器有隐式共享,它应该可以正常工作,因为return lst它并没有真正复制列表的内容,只是增加引用计数,并const确保我不能修改它(如果get_list出于某种原因想要确保它,或者需要它是const方法本身)。我的想法在这里正确吗?

4

1 回答 1

1

和 const 确保我不能修改它......我的想法在这里正确吗?

我无法理解整个问题。但是,以上部分是不正确的。您只是const从函数返回一个值,它并不要求接收端也是const. 因此允许删除constmylst并且它再次变得可修改。

/* const */ QList<mytype> mylst = get_list();  // ok! 'mylst' is modifiable
于 2011-10-24T07:18:01.570 回答