我已经看过这里和这里有关这个主题的相关问题,它们都描述了对象切片,但它们都没有说明它是否安全,可靠和可预测.
有没有从任何标准或编译器的保证,如果我传递一个子类对象的值到想要一个超类的方法,被切掉的部分是完全相同的子类的成员,我将能够使用切片的超类对象没有任何关于未定义行为的顾虑?
是的,它是安全,可靠和可预测的,因为它由标准很好地定义(它只是从派生类对象复制构造基类对象).
但不,它不安全,不应该依赖,并且通常被视为不可预测,因为你的读者不会知道发生了什么.当其他人稍后尝试修改您的代码(包括您自己的未来自我)时,这将触发大量错误.它基本上是一个禁忌,与goto
声明的方式非常相似,它的定义非常明确,可靠且可预测.