首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ -返回常量对象常量向量的常量向量

C++ -返回常量对象常量向量的常量向量
EN

Stack Overflow用户
提问于 2011-07-19 01:40:01
回答 3查看 2.3K关注 0票数 1

我正在解析一个文件,并创建一个Foo对象向量的向量。

代码语言:javascript
复制
vector< vector<Foo*> > mFooVectors;

我必须允许使用以下getFoos函数进行访问。

代码语言:javascript
复制
const vector<const Foo*>&         getFoos(int index); 

所以我创建了一个向量的const声明:

代码语言:javascript
复制
const vector< const vector<const Foo*> > mConstFooVectors;

现在我该怎么做mConstFooVectors = mFooVectors,这样我才能返回一个对mConstFooVectors的引用?

EN

回答 3

Stack Overflow用户

发布于 2011-07-19 01:43:22

在任何给定级别添加const都不可能那么简单。模板的不同实例化是不同的无关类型,vector<T>vector<const T>无关,并且无法从一个转换为另一个。

另一方面,你可以创建一个不同的向量,然后只复制内容,但这可能会很昂贵,因为你必须复制所有不同的包含的向量。

顺便说一句,如果您返回外部向量的常量引用,常量引用将表现为:const std::vector< const std::vector< Foo * const > >&,请注意,由于与C++中的类型相关联的值语义,常量在中传播。问题是存储在内部向量中的值是一个指针,使该指针为常量并不会使指向的对象为常量。类似地,您的getFoos(int)的行为将等同于const std::vector< Foo * const >&。注意,这是行为,而不是实际的类型。

票数 8
EN

Stack Overflow用户

发布于 2011-07-19 01:46:30

我不知道你想做什么,但我会看看boost::ptr_vector

特别是,如果你没有正确处理,你的向量成员可能会泄漏...(RAII)

票数 1
EN

Stack Overflow用户

发布于 2011-07-19 01:46:41

您正在混合一个

代码语言:javascript
复制
vector<const Foo *>

使用

代码语言:javascript
复制
vector<Foo *>

你必须决定你想要哪一个-没有办法从一个转换到另一个(不复制)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6736938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档