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

时间:2015-10-21 17:18:35

标签: c++ string static-cast

我有一个问题,它不想使用 static_cast&lt;&gt; 进行投射。它能是什么?

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

1 个答案:

答案 0 :(得分:5)

你在第二级丢弃了conststatic_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)));