gpt4 book ai didi

c++ - reinterpret_cast - 奇怪的行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:02 26 4
gpt4 key购买 nike

我遇到了与 reinterpret_cast 相关的奇怪错误。看看下面的代码:

int* var;
reinterpret_cast<void const **>(&var);

VSC++2010 错误:error C2440: 'reinterpret_cast' : cannot convert from 'int ** ' to 'const void ** '

gcc 4.1.2 中的错误:从类型“int**”到类型“const void**”的 reinterpret_cast 抛弃了常量

gcc 4.6.2 中的错误:从类型“int**”到类型“const void**”的 reinterpret_cast 丢弃限定符

有没有人知道为什么编译器说我要放弃 const。我和我的几个同事都不知道这有什么问题。

感谢您的帮助!

最佳答案

C++03 标准的第 5.2.10 节讨论了 reinterpret_cast 可以做什么。它明确指出“reinterpret_cast 运算符不应丢弃常量”。

C++03 标准的第 5.2.11 节定义了抛弃常量性。那里使用的符号有点令人困惑,但它基本上表明,如果给定限定条件没有隐式转换,则两种类型之间的转换会“丢弃常量”。

在您的情况下,您正在尝试将 int ** 转换为 void const**。编译器询问“我可以在 T **T const** 之间隐式转换吗?”,答案是否定的,所以它说你正在抛弃常量。

这里的逻辑是 reinterpret_cast 是用来处理变化的类型,而不是变化的限定符(这就是 const_cast 的用途)。所以如果你要求它做一些你需要 const_cast 的事情,它会拒绝。

关于c++ - reinterpret_cast - 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14649332/

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