为什么我不能使用 static_cast<const char**>(str) 而不是 (const char**)str?
Why cant i use static_cast<const char**>(str) instead of (const char**)str?
我有一个问题,它不想使用 static_cast<> 进行投射。它可以是什么?
void myCompare(const void *str)
{
const char *ca = *(static_cast<const char**>(str)); //error
const char *a = *(const char **)str; //ok
}
你在第二层施放const
,而static_cast
是不允许的(事实上,"C++"与const_cast
没有任何区别) :
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)));
我有一个问题,它不想使用 static_cast<> 进行投射。它可以是什么?
void myCompare(const void *str)
{
const char *ca = *(static_cast<const char**>(str)); //error
const char *a = *(const char **)str; //ok
}
你在第二层施放const
,而static_cast
是不允许的(事实上,"C++"与const_cast
没有任何区别) :
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)));