我需要了解这条线意味着
char A = strdup(const_cast<char*>(aString.c_str()));
我理解的strdup从这个做什么:
strdup() - what does it do in C?
strdup需要一个const char指针。它的<,>上面的一部分,让我困惑。
我需要了解这条线意味着
char A = strdup(const_cast<char*>(aString.c_str()));
我理解的strdup从这个做什么:
strdup() - what does it do in C?
strdup需要一个const char指针。它的<,>上面的一部分,让我困惑。
const_cast<type>
是一个C++运算符。你可以阅读关于它here。
为什么它需要在这里,因为我不明白(假设aString
是std::string
型)c_str()
已经返回其strdup
需要const char*
,在任何情况下将const
内斯是隐式进行。
只有当函数收到非const
参数时,它才是必需的,即使这样它通常也不被推荐。
转换操作符,
char * p = const_cast<char*>(q);
让您免去常量性(前提是q是一个const char *)。
通常const_cast<T>
可用于添加或删除const限定符。
但是,由于strdup
应该采取const char *
这里不需要施放。
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*)
,事实证明这个特定的演员是毫无意义的。
'const_cast'不必要地将'c_str()'的结果从'char const *'转换为'char *' - 这里没有意义。 –
ildjarn
2012-02-21 19:01:38
**恭喜!**您发现了一个错误! – wilhelmtell 2012-02-21 19:02:32
那条线并不意味着什么;它不会编译。 (关于用指针类型初始化一个'char'的东西。) – 2012-02-21 19:33:21