【问题标题】:Is it practically safe to cast container of T* to container of const T*?将 T* 的容器转换为 const T* 的容器实际上安全吗?
【发布时间】:2018-10-12 09:22:19
【问题描述】:

例如,

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

// use cvalues...

这在标准中当然是不允许的。 但是,除非它们是专门的,否则指向类型的常量不会对实现细节产生任何影响。在这种情况下,我是否可以认为这种转换实际上是安全的?

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

【问题讨论】:

    标签: pointers containers reinterpret-cast


    【解决方案1】:

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

    【讨论】:

    • 当你取消引用 std::vector::const_iterator 类型时,你会得到 T *const(const pointer) 而不是 const T*(pointer to const)。
    猜你喜欢
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    相关资源
    最近更新 更多