【发布时间】:2013-04-21 17:38:58
【问题描述】:
我有一个带有指向对象的成员向量的类。现在我想要一个访问器方法来返回对该向量的 const 引用。我还希望调用者方法无法编辑向量指针指向的对象,即指针应该指向 const 对象。这是我的错误代码:
class Foo
{
private:
vector<Foo*> myFoos;
public:
const vector<const Foo*> &getMyFoos(void)
{
return myFoos; //Doesn't work since vector<Foo*> cannot be cast to vector<const Foo*>
}
}
我已经看到了类似问题的答案,其中解决方案是制作向量 myFoos 的副本,其中副本的类型正确。由于 myFoos 向量可能非常大,是否可以在不复制的情况下执行此操作?
【问题讨论】:
-
如果结果仅在短时间内使用,则可以返回
static_cast<Foo const *>(myFoos.data()),然后再对向量进行变异... -
返回一对常量迭代器开始和结束。在 C++11 中教
for如何迭代它。 -
@H2CO3:然后您将
const Foo添加到您的演员表vector,然后再通过原始vector访问它并尝试更改它... BOOM。 -
或者使用类型来包装指针,其中
operator*和operator->有足够的const版本。 -
添加一个方法来访问对象,而不是向量:
Foo const* getFoo(size_t i) const { return myFoos[i]; }-- 也是一个获取大小的方法。如果您的指针不能为空,请改为返回引用。
标签: c++ pointers vector return constants