【发布时间】:2014-01-21 17:51:15
【问题描述】:
我有课:
class Fruit
{
protected:
int Vitamins
[...]
public:
[...]
}
结构:
struct InTheMatrixFruit
{
int vitamins;
virtual ~InTheMatrixFruit();
};
还有一个对 Fruit 进行引用的函数:
void function(Fruit &fruit);
如果我写在这个函数中:
reinterpret_cast<InTheMatrixFruit&>(fruit).vitamins = 300;
它确实修改了维生素保护值。
但是,如果我像这样删除虚拟:
struct InTheMatrixFruit
{
int vitamins;
~InTheMatrixFruit();
};
它不再起作用了。
为什么它适用于 virtual 而不是没有?
我正在考虑 VTables。
提前致谢:)
【问题讨论】:
-
你不能那样做,
Fruit和InTheMatrixFruit是完全不相关的类。不要使用reinterpret_cast<>,除非你 100% 确定你在做什么!! -
您这样做是在自找麻烦。如果有人在
vitamins的定义之前向任一类添加了新的成员变量,那么您的代码将会失败。 -
正如 microsoft 网站 (msdn.microsoft.com/en-us/library/e0w9f63b.aspx) 中所说:“reinterpret_cast 的结果除了被强制转换回其原始类型之外,不能安全地用于任何其他用途。其他用途充其量是不可移植的”
标签: c++ class struct virtual vtable