struct Base {
int i, j;
};
struct Derived : Base {};
在上述情况下,如果执行以下操作:
Base b;
auto& d = static_cast<Derived&>(b);
d.i = 1;
这会是不确定的行为吗?
注意:由于某些原因,我无法编辑自动生成的Google protobuf库的代码。因此,将这些类扩展到我的自定义类,该类提供了更多的类型和API,但没有任何额外的数据成员。
是的,这是不确定的行为。使用static_cast
以从基类铸造到派生类型的对象不是的一个实例是未定义的行为。
此外,通过无效类型的变量(不是动态类型,动态类型的基类char
或unsigned char
类型以及其他几种情况)访问对象,从而破坏了严格的别名规则。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句