我已经看过关于这个话题的
here和
here这些相关的问题,他们都描述了对象切片,但是它们都没有
解决它是否安全,可靠和可预测.
有没有来自标准或编译器的保证,如果我将一个子类对象通过值传递给一个想要超类的方法,那么被切分的部分就是子类的成员,我将能够使用切片的超类对象没有任何关于未定义的行为的问题?
是的,它是安全,可靠和可预测的,因为它被标准定义好(它将从派生类对象复制构造基类对象).
但不,不安全,不应该依赖,一般被视为不可预测的,因为你的读者不知道发生了什么.当其他人尝试稍后修改代码(包括您自己的未来自我)时,会触发许多错误.它基本上是一个no-no,与goto语句完全一样,也是完全清晰,可靠和可预测的.