emk*_*y08 5 c++ containers pointers casting const
C++从提供隐式转换T *到const T *.
如果我T *现在在容器类中使用,比如in vector<T *>,那么当然没有隐式转换vector<const T *>.
使用reinterpret_cast似乎可以投射整个容器,但实际上这样做是否安全?
template <typename T>
const vector<const T *> & constVector(const vector<T *> & vec) {
return reinterpret_cast<const vector<const T *> &>(vec);
}
// Usage:
vector<int *> vec1;
vector<const int *> vec2 = constVector(vec1);
Run Code Online (Sandbox Code Playgroud)
但实际上这样做是否安全?
不,这是未定义的行为.reinterpret_cast在非常有限的场景中使用它是安全的,请参考cppreference.
如果不关心所有权,您可能希望在非范围的对象上使用(或实现)const 视图const.谷歌搜索span将是一个良好的开端.std::string_view就是这样的一个例子std::string.