C++ - 返回const对象的const向量的const向量

1 c++ stl const

我正在解析一个文件并创建一个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的引用?

Dav*_*eas 8

您无法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 >&.注意,这是行为而不是实际类型.

  • 使用`vector <const T>`无论如何都会失败,因为value_type必须是可赋值的. (2认同)