2012-02-21 86 views
1

可能重复:
behaviour of const_cast类型转换?模板....这是什么cpp代码行?

我需要了解这条线意味着

char A = strdup(const_cast<char*>(aString.c_str())); 

我理解的strdup从这个做什么:

strdup() - what does it do in C?

strdup需要一个const char指针。它的<,>上面的一部分,让我困惑。

+0

'const_cast '不必要地将'c_str()'的结果从'char const *'转换为'char *' - 这里没有意义。 – ildjarn 2012-02-21 19:01:38

+4

**恭喜!**您发现了一个错误! – wilhelmtell 2012-02-21 19:02:32

+0

那条线并不意味着什么;它不会编译。 (关于用指针类型初始化一个'char'的东西。) – 2012-02-21 19:33:21

回答

3

const_cast<type>是一个C++运算符。你可以阅读关于它here

为什么它需要在这里,因为我不明白(假设aStringstd::string型)c_str()已经返回其strdup需要const char*,在任何情况下将const内斯是隐式进行。

只有当函数收到非const参数时,它才是必需的,即使这样它通常也不被推荐。

1

转换操作符,

char * p = const_cast<char*>(q); 

让您免去常量性(前提是q是一个const char *)。

通常const_cast<T>可用于添加或删除const限定符。

但是,由于strdup应该采取const char *这里不需要施放。

1
      aString 

一个变量,可能类型的std::string

      aString.c_str() 

const char *指向空终止char小号

 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*),事实证明这个特定的演员是毫无意义的。