我有一类的容器(含指针)作为成员:如何返回一个const std :: vector <Object * const>?
MyClass{
private:
std::vector<MyObject*> _VecMyObjs;
public:
const std::vector<MyObject* const> GetVecMyObj();
}
现在我尝试实施GetVecMyObj()。以下是我想出了...
const vector<MyObject *const> ACI_CALL MyClass::GetVecMyObjs()
{
const vector<MyObject *const> VecMyObjs;
VecMyObjs.assign(_VecMyObjs.begin(), _VecMyObjs.end());
return VecMyObjs;
}
但当然编译器警告我,说我使用分配功能的一个const-对象。有一个更好的方法吗?我的意思是,当然,我不希望VecMyObjs在课堂外改变VecMyObj。如何在没有编译器警告的情况下实现该目标?编辑: 好的。谢谢大家。现在是这样的:
const vector<MyObject *const> ACI_CALL MyClass::GetVecMyObjs()
{
const vector<MyObject *const> VecMyObjs;
VecMyObjs.assign(_VecMyObjs.begin(), _VecMyObjs.end());
return VecMyObjs;
}
但是,我无法绕过分配函数,对吧?例如。如果我想让“一切”保持不变,那么铸造“原创”是行不通的。
你不需要VicMyObjs是GetVecMyObjs函数内部常量......返回时,该资格将被隐式添加。 – 2010-12-15 11:14:42
您确定要使用vector而不使用vector 吗?为什么通过引用返回const不可行? –
Palmik
2010-12-15 11:30:12
关于你的编辑,你希望一切都是恒定的:正如其他人已经指出的,你正在使指针为const,而不是指向的对象。这些可以改变,从而改变你的内部对象。 – stefaanv 2010-12-15 11:54:25