C ++提供了从T *
到const T *
的隐式转换。
如果现在像在T *
中那样在容器类中使用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);
答案 0 :(得分:9)
但是这样做真的安全吗?
不,这是未定义的行为。仅在极少数情况下使用reinterpret_cast
是安全的,请参阅cppreference。
如果不考虑所有权,则可能要在非const
对象范围内使用(或实现)const
视图。搜寻span
将是一个不错的开始。 std::string_view
是std::string
的一个示例。