【发布时间】:2017-09-15 10:41:27
【问题描述】:
当我使用static_cast:
const C* cObj; // C is a user-defined class
void* obj = static_cast<void*>(cObj);
我得到错误:
转化失去限定词
但是当我使用 C 风格的演员表时,它可以工作:
const C* cObj;
void* obj = (void*)cObj;
为什么会这样?
通过 C++ 样式转换的正确方法是什么?
【问题讨论】:
-
你做错了,你应该转换为
const void*(当然obj也应该是那种类型)。你不能用static_cast抛弃const。 -
C 风格的演员表就像一把大锤;如果可以的话,程序员需要知道后果。如果您不确定,那么在您阅读它们之前,切勿使用 C 样式转换或
reintepret_cast,起点是:en.cppreference.com/w/cpp/language/explicit_cast -
@Someprogrammerdude 如果我真的想删除
constness 怎么办?我应该改用const_cast<>吗? -
我并不是说这是一个好主意(通常不是),但是是的,这是抛弃
const的唯一方法。不过,您可能需要两种类型转换,一种用于const,另一种用于类型。 -
话虽如此,您要解决的实际问题是什么?你为什么做这个?在不告诉我们应该解决什么的情况下寻求解决方案的帮助称为the XY problem。也许如果您询问实际问题,我们可以帮助您解决它,而无需抛弃
const?
标签: c++ casting static-cast