返回const对象的const向量的const向量
C++ - returning a const vector of const vectors of const objects
我正在解析一个文件并创建Foo对象向量的向量。
vector< vector<Foo*> > mFooVectors;
我必须允许使用以下getfoo函数进行访问。
const vector<const Foo*>& getFoos(int index);
所以我为vector创建了一个const声明:
const vector< const vector<const Foo*> > mConstFooVectors;
现在我怎么做mConstFooVectors = mFooVectors所以我可以返回一个引用mConstFooVectors?
您不能在任何给定级别轻松添加const
。模板的不同实例化是不同的不相关类型,vector<T>
与vector<const T>
不相关,并且无法将从一个转换到另一个。
另一方面,您可以创建一个不同的向量并复制其内容,但这可能会很昂贵,因为您必须复制所有不同的包含向量。
顺便说一下,如果您向外部向量返回一个const引用,那么该const引用将表现为:const std::vector< const std::vector< Foo * const > >&
,请注意,由于c++中与类型相关的值语义,const-ness 在中传播。问题在于,存储在内部向量中的值是一个指针,使该指针为常量并不能使所指向的对象为常量。同样,getFoos(int)
的行为将等同于const std::vector< Foo * const >&
。注意,这是行为而不是实际的类型。
我不知道你想做什么,但我会看看boost::ptr_vector
特别地,如果你没有正确处理vector成员,它可能会泄漏…(RAII)
你在混用
vector<const Foo *>
vector<Foo *>
你必须决定你想要哪一个-没有办法从一个转换到另一个(不做副本)。
相关文章:
- 如何在旧c++中初始化const-std向量
- 如何在 c++ 中将向量转换为<string>常量字符* const*?
- 如何在字符串向量中指向const int
- 索引 2D 向量时'Reference to type const..'编译错误
- STL按客户"<"运算符对向量进行排序。为什么要将"<"运算符定义为 const?
- 是否可以交换在 c++ 中作为函数 func(say) 中的参数传递的 const 向量的两个元素,例如:vector<int>func (const vector<int>&
- 在lambda中捕获各种向量使元素const
- 正确的方法通过巨大的const对象的向量
- 将共享_ptr的向量转换为shared_ptr的向量到const
- 通过const Rerefence传递向量并将元素添加到向量
- 与const成员配对的向量
- 将指向const的指针存储到structs的向量中
- 返回指向 const 对象的 const 共享指针的 const 向量
- 指向C样式数组元素的指针的const向量
- 如何对const向量排序?
- 非Const对象的Const向量
- 返回const对象的const向量的const向量
- 如何使用c++ 11初始化函数结果的const向量?
- 将非常量向量传递给引用<string> const 向量<const string>?
- 在类构造函数中初始化const向量(c++)