[英]Object slicing while casting in C++
向下铸造时如何静态铸造导致对象切片? 像下面的情况一样;
class Parent{ // base class
public:
virtual void draw();
};
class Child: public Parent{ //derived class
public:
void draw()
{
static_cast<Parent>(*this).draw();
// do other stuff
}
};
您不是低调,而是高调。
这会导致切片,因为static_cast<Parent>(*this)
通过复制*this
创建新的临时Parent
对象。 它基本上等同于以下内容:
Parent{*this}.draw();
根据C ++标准:
表达式static_cast(v)的结果是将表达式v转换为类型T的结果。如果T是左值引用类型或右值引用到函数类型,则结果为左值; 如果T是对对象类型的右值引用,则结果为xvalue; 否则,结果为prvalue 。 static_cast运算符不得放弃常数。
...
- prvalue是一个表达式,其求值初始化一个对象或位域,或计算一个运算符的操作数的值,该值由其出现的上下文指定。
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.