c-如何返回const std :: vector?
作者:互联网
我有一个包含容器(包含指针)的类作为成员:
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-Object上使用了assign-function.有一个更好的方法吗?我的意思是,我当然不希望VecMyObjs在类之外更改VecMyObj.在没有编译器警告的情况下如何实现?
编辑:
好的.谢谢大家.现在是这样的:
const vector<MyObject *const> ACI_CALL MyClass::GetVecMyObjs()
{
const vector<MyObject *const> VecMyObjs;
VecMyObjs.assign( _VecMyObjs.begin(), _VecMyObjs.end());
return VecMyObjs;
}
但是,我无法绕过分配功能,对吗?例如.如果我希望“所有内容”保持不变,则强制转换“原始内容”无效.
解决方法:
我不确定std :: vector< MyObject * const> (常量指针的向量)确实是您想要的:我相信您的意思是std :: vector< MyObject const *> (指向常量对象的指针的向量).
>通过在向量上返回常量引用,自然可以实现“第一级”(指针常量).从const向量只能获取const_iterator,因此可以保证不会修改指针(但可以更改指针).
>常数的“第二级”(指针常数)很难获得.如其他人已经指出的,要么返回向量的新实例:
return std::vector<const MyObject *>(_VecMyObjs.begin(), _VecMyObjs.end());
或者,如果适用,尝试查看Boost Pointer Container库(最著名的是ptr_vector),该库除其他外提供正确的constness传播:
Propagates constness such that one
cannot modify the objects via a
const_iterator.
您必须了解,在向量上返回const引用可确保无法对其进行修改(不得插入,删除或修改其值).因此,在大多数情况下,返回const std :: vector< T> &安培;之所以走,是因为如果不涉及任何复制.这里的问题实际上是特定于指针容器的,其中值的恒定性不提供指针的恒定性.
标签:c,const,stl,encapsulation 来源: https://codeday.me/bug/20191013/1908833.html