繁体   English   中英

在C ++中进行转换时的对象切片

[英]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 ++标准:

[expr.static.cast / 1]

表达式static_cast(v)的结果是将表达式v转换为类型T的结果。如果T是左值引用类型或右值引用到函数类型,则结果为左值; 如果T是对对象类型的右值引用,则结果为xvalue; 否则,结果为prvalue static_cast运算符不得放弃常数。

[basic.lval / 1.2]

...

  • prvalue是一个表达式,其求值初始化一个对象或位域,或计算一个运算符的操作数的值,该值由其出现的上下文指定。

...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM