汉扬编程 C语言入门 rust编程语言禁止c/c++的x=y=z这样的连续赋值语句

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

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

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编译器不近人情, 太苛刻死板, 其实他却是对程序员最有情, 避免你陷入无尽的维护漩涡中!

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

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

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

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

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

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/cjia/6145.html

第十章、c控制语句之分支if、else

又有一道C语言的题需要请教!

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部