可能重复:
behaviour of const_cast
我需要了解这条线的含义
char A = strdup(const_cast<char*>(aString.c_str()));
我理解strdup从中做了什么:
strdup() - what does it do in C?
strdup需要一个const char指针。它的&lt;,&gt;上述一行的一部分让我感到困惑。
答案 0 :(得分:3)
const_cast< type >
是一个C ++运算符。你可以阅读它here。
我不明白为什么在这里需要它,因为(假设aString
属于std::string
类型)c_str()
已经返回const char*
所需的strdup
,无论如何,隐含地添加const
ness。
只有当函数接收到非const
参数时才需要它,即使这样,通常也不建议这样做。
答案 1 :(得分:1)
演员,
char * p = const_cast<char*>(q);
允许你删除constness(前提是q是一个const char *)。
通常const_cast<T>
可用于添加或删除const限定符。
但是,由于strdup
应选择const char *
,因此不需要此处的演员。
答案 2 :(得分:1)
aString
变量,可能是std::string
aString.c_str()
const char *
指向以char
s
const_cast<char*>(aString.c_str())
转换,将()
内的值转换为<>
内的类型。在这种情况下,从const char*
转换为char*
。这是一个C ++风格的演员表(另请参阅static_cast<>()
,dynamic_cast<>()
和reinterpret_cast<>()
)。
strdup(const_cast<char*>(aString.c_str()));
正如您所说,您知道strdup
的作用。由于strdup
的签名可能是char* strdup(const char*)
,因此事实证明这个特定的演员阵容毫无意义。