使用对象切片进行有效分配

Using object slicing for effective assignment

提问人:k huang 提问时间:7/14/2022 更新时间:7/14/2022 访问量:70

问:

假设我有定义

struct A{
    int a1 = 0;
    int a2 = 1;
};

struct B: public A{
    int b1 = 2;
    int b2 = 3;
};

我有一个我要调用的 B 对象,我想将其从 A 继承的字段更新为我调用的另一个 A 对象中的值。显然,我可以通过分配每个字段来做到这一点,但是可以在这里使用对象切片吗?foobar

我尝试使用此代码

(A) foo = bar;

但它不会修改字段,我猜这是因为我以某种方式制作了副本。那么我可以使用对象切片来做到这一点吗,如果是这样,那就是 1.)不是 UB 和 2.)合理?

C++ 赋值运算符 对象切片

评论

1赞 user4581301 7/14/2022
做描述性最强、最容易理解的事情,直到被迫做一些描述性较小的事情。即使它奏效了,你要做的事情也会让很多程序员看着代码,想知道你到底想做什么。
6赞 NathanOliver 7/14/2022
(A) foo创建一个临时对象,它不允许像 .为什么不直接给出一个函数呢?AfooABoperator =(const A&)
1赞 WhozCraig 7/14/2022
Fwiw,可能会做你看起来非常奇怪的事情。然而,我同意@NathanOliver。首先要做一个合适的操作员。(A&) foo = bar;
3赞 Richard Critten 7/14/2022
static_cast<A&>(b_obj) = a_obj;- 直播 - godbolt.org/z/d3eGeb8WM
0赞 Marek R 7/14/2022
请以代码的形式提供最小的可重复示例!开头是: godbolt.org/z/qhW5v5fda

答: 暂无答案