你必须强制指针“重新解释”:
reinterpret_cast(pointer;
此转换意味着编译器知道如何停止检查以更好地说明此表达式的二进制数据。 因此,每次执行reinterpret_cast时都会检查两次平台、内存对齐等知识。 创建简单的单元测试等,并在valgrind或地址屏幕程序中运行。
所以现在想想。 如果你真的需要投影这样的指针的话。 通常,重新设计功能等就可以解决这样的问题。 例如,如果只需要来自指定值的数据将其存储在一些额外的变量等中)。
也可以在编译器中强制执行一些检查。
模板
dst*safe_pointer_cast(src*src ) )是
{
static_assert(sizeof(src )==sizeof ) dest ),' size of pointed values differ ' );
static_assert(alignof(src )==align of (dest ) )、' alignment different ' );
返回重复项_ cast (src;
}