gpt4 book ai didi

c++ - 与 const_cast 相反

转载 作者:行者123 更新时间:2023-12-03 11:15:00 27 4
gpt4 key购买 nike

我有一个 std::vector<int*> v我想防止进一步写入它。 C++ 编译器不接受这个

const std::vector<const int*>& w = v;

但它接受这个

const std::vector<const int*>& w = reinterpret_cast<const std::vector<const int*>&>(v);

后者确实适用于 Microsoft 的编译器,这意味着 int*里面 vconst int*里面 w在内存中具有相同的地址。

这是偶然的,作为一种未指定的行为,还是有效的 C++?它是否适用于 vector 内的所有类型,例如 std::vector<std::shared_ptr<int>> ?如果无效,还有其他方法可以进行此转换吗?

我知道我也可以复制 vector ,但我想避免这种情况,因为我的 vector 非常大。

最佳答案

这是未定义的行为。

std::vector<const int*>std::vector<int*>是两个不同的类(由相同的模板生成,但这无关紧要)。他们不能互相别名,你不能reinterpret_cast他们之间。

我的解决方案是使用 std::span :

const std::span s{const_cast<const int* const*>(v.data()), v.size()};

这将创建一个 const std::span<const int* const> .

关于c++ - 与 const_cast 相反,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65408815/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com