打字?模板....这个cpp代码是什么?

时间:2012-02-21 18:59:29

标签: c++ c

  

可能重复:
  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;上述一行的一部分让我感到困惑。

3 个答案:

答案 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

为单位的以nul结尾的数组
       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*),因此事实证明这个特定的演员阵容毫无意义。