【发布时间】:2010-11-08 18:04:03
【问题描述】:
以下代码在 C++ 中给出了编译器错误:
const double** x;
const void** y = x;
如何获得 const 安全的等价物?
当然,你可以通过一个简单的演员来实现它:
const void** y = (const void**) x;
但肯定编译器应该知道这可以吗?为什么会抱怨?
【问题讨论】:
标签: c++
以下代码在 C++ 中给出了编译器错误:
const double** x;
const void** y = x;
如何获得 const 安全的等价物?
当然,你可以通过一个简单的演员来实现它:
const void** y = (const void**) x;
但肯定编译器应该知道这可以吗?为什么会抱怨?
【问题讨论】:
标签: c++
为什么编译器应该知道这是可以的?我认为您想要以下内容
void *y = x;
x = static_cast<const double**>(y); // casting back needs static_cast or c-style cast
void** 没有void* 所具有的特殊属性(即通用数据指针)。
【讨论】:
const void** 不应该用作 const T** 类型的通用指针,但不幸的是它不是一个非常适合谷歌的搜索词。
void* 已经足够清楚地表明存在一些时髦的东西。无需使用更容易危险使用的演员表。
为什么会抱怨?
因为这样不行。
有一个常见问题解答解释了原因,但我现在似乎找不到它。
您的 C 样式转换解析为 reinterpret_cast,它告诉编译器忽略类型。
【讨论】: