将指针转换为容器类型中的const

时间:2018-11-22 17:24:37

标签: c++ pointers casting containers const

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);

1 个答案:

答案 0 :(得分:9)

  

但是这样做真的安全吗?

不,这是未定义的行为。仅在极少数情况下使用reinterpret_cast是安全的,请参阅cppreference


如果不考虑所有权,则可能要在非const对象范围内使用(或实现)const 视图。搜寻span将是一个不错的开始。 std::string_viewstd::string的一个示例。