Pointers 将T*容器浇铸到常数T*容器实际上安全吗?

Pointers 将T*容器浇铸到常数T*容器实际上安全吗?,pointers,containers,reinterpret-cast,Pointers,Containers,Reinterpret Cast,比如说, std::vector<SomeNonCopyableType*> values = getVector(); auto &cvalues = reinterpret_cast<std::vector<const SomeNonCopyableType*>&>(values); // use cvalues... std::vector values=getVector(); 自动和C值=重新解释(值); //使用C值。。。 当

比如说,

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

// use cvalues...
std::vector values=getVector();
自动和C值=重新解释(值);
//使用C值。。。
当然,这在标准中是不允许的。 然而,点类型的常量在实现细节上不会有任何区别,除非它们是专门化的。在这种情况下,我可以认为这个转换实际上是安全的吗?< /P>
如果这是一个坏主意,那么有没有一种优雅的方法可以让指针指向常量的容器从指针指向非常量的容器变成指针指向常量的容器,而无需进行复制?

实际上是的,但这不是你应该做的。使用容器的
const\u迭代器
类型来处理容器中包含的元素范围,而不是给容器添加别名。(如果愿意,您可以使用experimental
std::experimental::ranges::Range
struct来帮助实现这一点。)

当您取消引用std::vector::const_迭代器类型时,将得到T*const(const指针)而不是const T*(指向const的指针)。