我正在解析一个文件并创建一个Foo对象向量的向量.
vector< vector<Foo*> > mFooVectors;
Run Code Online (Sandbox Code Playgroud)
我必须允许使用以下getFoos函数进行访问.
const vector<const Foo*>& getFoos(int index);
Run Code Online (Sandbox Code Playgroud)
所以我创建了一个我的向量的const声明:
const vector< const vector<const Foo*> > mConstFooVectors;
Run Code Online (Sandbox Code Playgroud)
现在我该怎么做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 >&.注意,这是行为而不是实际类型.
| 归档时间: |
|
| 查看次数: |
1836 次 |
| 最近记录: |