《水贴》关于内部含计算的结构体的赋值和初始化

本文探讨了在C++中结构体含有计算成员时,赋值与初始化的区别,导致的不同结果。通过示例展示了当结构体`StrA`的成员`c`依赖于`a`和`b`的计算,在分别使用赋值和初始化时,`c`的值如何受到影响。问题的关键在于初始化时`c`的计算发生在成员`a`和`b`设定值之前,而赋值操作则不会重新计算`c`。提醒开发者避免在结构体中进行计算,以免引发不易察觉的错误。
摘要由CSDN通过智能技术生成

关于内部含计算的结构体的赋值和初始化

问题产生

今天被问到一个含计算的结构体的问题,一时没转过来。结构体类似于:

struct StrA
{
    int a;
    int b;
    int c = a + b;
};

调试过程就不说了,最终发现实际上是赋值和初始化的问题。即

    StrA stra;
    stra.a = 10;
    stra.b = 20;
    std::cout << "c1 = " << stra.c << std::endl;


    StrA strb{ 10,20 };
    std::cout << "c2 = " << strb.c << std::endl;

二者结果不一致的问题。

结果分析

上述结果为:
在这里插入图片描述

原因是stra中a,b是赋值产生的,而c在初始化的时候就已经完成了计算。即通过a和b的初始化值计算得到了c,再将a和b分别赋值为10和20.

strb中,是直接初始化了a =10, b =20,然后计算了c,因此得到想要的结果。

回头来看,就是初始化和赋值的操作问题,但是在结构中做计算实在不是明智之举,所以造成的困扰也不易察觉。以此记录,以示后人。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值