可以连续赋值吗_rust编程语言禁止c/c++的x=y=z这样的连续赋值语句

489c1d25c3f201ae931a8867093ac381.png

rust编程语言学习

rust不允许 x=y=z这样的连续赋值语句,几十年的IT编程工程领域经验教训证明,c/c++的连续赋值语句确实引发了不少问题, 首先这种连续赋值语句只是个语法糖,并没有带来什么效率提升, 然而实际编码中确实容易引发潜在bug。


比如:x = 3 末尾没有加分号, 被认为赋值表达式, 那么rust规定整个赋值表达式的类型为unit,既是一个(),是一个空tuple , 这个规定导致了rust不支持连续赋值,形如x=y=z;


比如:

let mut x : i32 = 1;x = 5;


对于c/c++而言, x=5这个表达式整体的类型为i32 , 即是左侧操作数的类型,但是rust规定为(), 形如:x=y=z; 在rust中, y=z这个表达式整体类型返回为(), 与x的i32类型不匹配, 所以编译报错,从而保证rust禁止连续赋值, 连续赋值本身没有性能的提升, 而且极易引发问题!所以rust从几十年编程工程经验出发, 禁止它确实高明。


rust语言这样精心的设计还带来一些好处, 比如if表达式中,她只允许条件表达式的类型是bool类型, 比如if x==y {} ,如果因为你的手误敲成了if x=y {}, 因为x=y这个赋值表达式的整体类型为(), 与bool不匹配, rust编译器一定报错,不会通过, 避免隐藏的bug , 但是对于c/c++而言,就会正常编译过去, 留下巨大隐患。


再比如:

fn main() {        let x = 2;    let mut y = x+3;        println!("{}", y);        println!("{:#?}", (y = x));    //(y=x) 圆括号表示取取值表达式的整体类型, 输出:()        if y == 2 {    //if y = 2 { //如果您手误把比较敲成了赋值, 那么因为赋值表达式(y=2)的整体类型为()                 //于rust语言规定if的条件表达式必须为bool类型不匹配,rust编译器报错                 //从而可以有效避免潜在bug.        println!("example");    }    else {        println!("noop");    }    }

有人抱怨rust编译器不近人情, 太苛刻死板, 其实他却是对程序员最有情, 避免你陷入无尽的维护漩涡中!

也许有人会发笑, 老于呀你讲的东西也太浅显了, 没水平, 我只能呵呵了,其实呀实际工程开发时并没有那么多玄幻黑科技,更多就是这些细微点滴处直接影响代码的品质,写代码就像过日子,不太可能天天轰轰烈烈,应于无声处见功夫。


对了,老于以前的网名叫:心尘了, 现在更名为:灵山行者。

老码农爱学习,爱编程,爱感悟,爱分享。

喜欢老于就请您关注我,点赞评论转发,您的支持对我很重要,可以支持我走下去,老码农想要探索新的活法, 除了键盘代码,我应该还可以去探索体悟这个多彩的世界!

我在学着做自媒体,写点东西,拍些视频。廉颇老矣,尚能吃饭!希望您能支持我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值