【发布时间】:2019-01-13 11:47:07
【问题描述】:
我在 CppLint 上遇到了这个错误:
Using C-style cast. Use reinterpret_cast<xmlChar *>(...) instead [readability/casting] [4]
当我尝试投射这样的东西时:
xmlChar* something = (xmlChar*) anOtherThing;
但如果我这样做:
xmlChar* something = reinterpret_cast<xmlChar *>(anOtherThing);
我在构建时遇到此错误:
error: reinterpret_cast from type ‘const char*’ to type ‘xmlChar*’ casts away constness
你能帮帮我吗?
【问题讨论】:
-
好吧,将
xmlChar*替换为const xmlChar*。编译器告诉你你抛弃了常量 -
c 风格的演员表已被弃用,因为它们做的事情太多而且经常同时进行。通常 reinterpret_cast 是直接替换,并且您保持相同的类型。我看不出 xmlChar 是从哪里来的——那是 anOtherThing 的类型吗?所以我会写
reinterpret_cast<char*>(anOtherThing)。但是如果你告诉我 anOtherThing 实际上是一个 const 指针,那么你还需要一个 const_cast即 reinterpret_cast<char*>(const_cast<Thing*>(thing)),或者反过来:const_cast<char*>(reinterpret_cast<const char*>(thing)); -
我建议你阅读这个great answer。它解释了你需要知道的关于 C++ 中的强制转换以及为什么你不应该使用 C-cast(做太多事情并且可以隐藏 UB)
-
感谢您的帮助,很好:)