[英]Why cant i use static_cast<const char**>(str) instead of (const char**)str?
I have an issue, it doesn't want to cast using static_cast<> . 我有一个问题,它不想使用static_cast <>进行转换 。 What can it be?
会是什么
void myCompare(const void *str)
{
const char *ca = *(static_cast<const char**>(str)); //error
const char *a = *(const char **)str; //ok
}
You're casting away const
on the second level, which static_cast
is not allowed to do (in fact, no "C++" cast apart from const_cast
): 您在第二个级别上抛弃了
const
,这是不允许static_cast
进行的(实际上,除了const_cast
之外,没有“ C ++” static_cast
const_cast
):
void const*
char const* *
// ^^^^^^^^^^^ ^^^^^
// pointee cv-qualifiers
// of pointee
Instead, write 相反,写
const char *ca = *(static_cast<const char* const*>(str));
The (char const**)
cast works here because it is equivalent to a static_cast
followed by a const_cast
(as per [expr.cast]/(4.3)) - ie it was equivalent to (char const**)
static_cast
const_cast
在这里起作用,因为它等效于static_cast
后跟const_cast
(根据[expr.cast] /(4.3))-即它等效于
const char *ca = *(const_cast<const char**>(static_cast<const char* const*>(str)));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.