我有一个问题,它不想使用 static_cast<> 进行投射。它能是什么?
void myCompare(const void *str)
{
const char *ca = *(static_cast<const char**>(str)); //error
const char *a = *(const char **)str; //ok
}
答案 0 :(得分:5)
你在第二级丢弃了const
,static_cast
不允许这样做(事实上,除了const_cast
之外没有“C ++”):
void const*
char const* *
// ^^^^^^^^^^^ ^^^^^
// pointee cv-qualifiers
// of pointee
相反,写一下
const char *ca = *(static_cast<const char* const*>(str));
此(char const**)
广告素材在此处有效,因为它等同于static_cast
后跟const_cast
(根据[expr.cast] /(4.3)) - 即相当于
const char *ca = *(const_cast<const char**>(static_cast<const char* const*>(str)));