为什么我不能使用static_cast <const char**>(str)而不是(const char**)str?

Mik*_*ail 1 c++ string static-cast

我有一个问题,它不想使用static_cast <>进行强制转换.它能是什么?

void myCompare(const void *str)
{
    const char *ca = *(static_cast<const char**>(str)); //error
    const char *a = *(const char **)str; //ok
}
Run Code Online (Sandbox Code Playgroud)

Col*_*mbo 5

你是const在第二级逃脱,这static_cast是不允许做的(事实上,没有"C++"分开const_cast):

          void    const*
   char const*         *
// ^^^^^^^^^^^    ^^^^^
// pointee        cv-qualifiers
//                of pointee
Run Code Online (Sandbox Code Playgroud)

相反,写

const char *ca = *(static_cast<const char* const*>(str));
Run Code Online (Sandbox Code Playgroud)

(char const**)铸造在这里工作,因为它相当于一个static_cast后跟一个const_cast(按照[expr.cast] /(4.3)) -即它是等效于

const char *ca = *(const_cast<const char**>(static_cast<const char* const*>(str)));
Run Code Online (Sandbox Code Playgroud)