从编译时的性能优化来讲
两种循环结构没有差别。它们被翻译为相同的“中间字节码”交给后端编译器LLVM
。
就前端编译器的词法分析能力而言
loop
能够提升rustc
的语义推断能力,从而更智慧地处理下面两类代码结构:
-
循环前,声明变量(未初始化);循环中,初始化变量;循环后,使用变量
let x; loop { // 此处若是 while true,rustc 直接报错。 x = 1; break; } println!("{}", x);
-
配合
break
表达式; 语句,loop {... break expr; ...}
立即变身赋值表达式的子表达式给变量赋值。let x = 1; let y = loop { // 传递给 break 的值被赋给了变量 y x += 1; if x == 3 { break x * 2; } };
上面这两项 while true 循环结构都做不到。
1
共 0 条评论, 1 页
评论区
写评论还没有评论