将T *容器浇铸到const T *的容器上几乎是安全的吗?

时间:2018-05-02 09:52:57

标签: pointers containers reinterpret-cast

例如,

std::vector<SomeNonCopyableType*> values = getVector();
auto &cvalues = reinterpret_cast<std::vector<const SomeNonCopyableType*>&>(values);

// use cvalues...

当然,标准不允许这样做。 但是,尖头类型的常量不会在实现细节上产生任何差异,除非它们是专门的。在这种情况下,我可以认为这种转换实际上是安全的吗?

如果这是一个坏主意,是否有一种优雅的方法可以在不制作副本的情况下从指针容器中创建指向const的指针容器?

1 个答案:

答案 0 :(得分:0)

实际上说是的,但这不是你应该做的。不要使容器别名,而是使用其const_iterator类型来处理容器中包含的元素范围。 (如果您愿意,可以使用实验std::experimental::ranges::Range结构来帮助解决此问题。)