为什么我不能使用 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)));