我有一个类型的成员变量vector<T>(其中T是一个自定义类,但它也可以是int.)我有一个函数,我想从中返回一个指向这个向量的指针,但我不希望调用者能够改变矢量或它的项目.所以我想要返回类型const vector<const T>*
我尝试过的铸造方法都没有.编译器一直在抱怨T与const T不兼容.
这里有一些代码,展示了我正在尝试做的事情的要点;
vector<int> a;
const vector<const int>* b = (const vector<const int>* ) (&a);
Run Code Online (Sandbox Code Playgroud)
这段代码不能为我编译.
提前致谢!
Jam*_*lis 30
如果你有一个const vector<int>你不能修改容器,也不能修改容器中的任何元素.您不需要a const vector<const int>来实现这些语义.
Dav*_*eas 14
关于为什么一个vector<T>无法正确转换为vector<const T>即使T可以转换为const T
这是编程中常见的反复出现的问题,无论是const还是继承(派生对象的容器都不能转换为基础对象的容器,即使包含的元素本身也可以).问题是逐个元素可以转换元素,但容器本身不能不破坏类型系统.
如果您被允许这样做vector< const T > &vr = my_vector_of_T,那么您将被允许添加元素vr,并且这些元素将根据定义保持不变.但与此同时,这些相同的元素将my_vector_of_T作为非const元素别名,并且可以通过该接口进行修改,从而破坏类型系统中的常量.
在一个特定的情况下,vector<int>被转换为一个vector<const int>,有机会,你不会注意到非常奇怪的效果--besides添加元素的vector<const int>,看怎么定的时间因素的变化,但仍然记得,给出了两个相关类型T1和T2为其一个关系存在,在大多数情况下,试图适用于容器同样的关系T1,并T2会破坏类型系统.