:ブール値に対して `if let`と` if`の間にパフォーマンスの違いはありますか?たとえば
let mut v = vec![2, 3, 4];
if let false = v.is_empty() {
v.push(5);
}
VS:
let mut v = vec![2, 3, 4];
if !v.is_empty() {
v.push(5);
}
私の直感では、それは些細だと関係ないということです。
:ブール値に対して `if let`と` if`の間にパフォーマンスの違いはありますか?たとえば
let mut v = vec![2, 3, 4];
if let false = v.is_empty() {
v.push(5);
}
VS:
let mut v = vec![2, 3, 4];
if !v.is_empty() {
v.push(5);
}
私の直感では、それは些細だと関係ないということです。
パフォーマンスに関する質問については、はを確認する必要があります。それ以外のものは本質的に推測しています。最初のレベルの推測として
しかし、あなたが生成されたアセンブリを見ることができますが:アセンブリ錆1.18を使用し、二つの機能を差分のために上記のコードをコンパイルする
#![crate_type="lib"]
pub fn one() {
let mut v = vec![2, 3, 4];
if let false = v.is_empty() {
v.push(5);
}
}
pub fn two() {
let mut v = vec![2, 3, 4];
if !v.is_empty() {
v.push(5);
}
}
はほとんど一定で、ラベルの周りに最小限の違いを示し、名前:
--- a.asm 2017-07-06 13:53:29.000000000 -0400
+++ b.asm 2017-07-06 13:53:48.000000000 -0400
@@ -1,2 +1,2 @@
-_ZN10playground3one17hbd49bc1da7229962E:
-.Lfunc_begin0:
+_ZN10playground3two17h3228f5d5d04f0491E:
+.Lfunc_begin1:
@@ -5 +5 @@
- .cfi_lsda 27, .Lexception0
+ .cfi_lsda 27, .Lexception1
@@ -7 +7 @@
-.Ltmp8:
+.Ltmp14:
@@ -10 +10 @@
-.Ltmp9:
+.Ltmp15:
@@ -12 +12 @@
-.Ltmp10:
+.Ltmp16:
@@ -18 +18 @@
- je .LBB1_8
+ je .LBB2_8
@@ -23 +23 @@
- movaps .LCPI1_0(%rip), %xmm0
+ movaps .LCPI2_0(%rip), %xmm0
@@ -25 +25 @@
-.Ltmp5:
+.Ltmp11:
@@ -28 +28 @@
-.Ltmp6:
+.Ltmp12:
@@ -36 +36 @@
- je .LBB1_4
+ je .LBB2_4
@@ -40 +40 @@
-.LBB1_4:
+.LBB2_4:
@@ -44 +44 @@
-.LBB1_8:
+.LBB2_8:
@@ -46,2 +46,2 @@
-.LBB1_5:
-.Ltmp7:
+.LBB2_5:
+.Ltmp13:
@@ -51 +51 @@
- je .LBB1_7
+ je .LBB2_7
@@ -56 +56 @@
-.LBB1_7:
+.LBB2_7:
私には、それは同じであることが十分に証明されています。だまされやすい人
let mut v = vec![2, 3, 4];
if !v.is_empty() {
v.push(5);
}
を*高*関連、そうでない場合:私はまだそれを理解することは簡単ですので、ブール型を好む[場合-ましょう条件が良い場合は正常ですか?](https://でのstackoverflow .com/q/37048629/155423) – Shepmaster
どうして 'if v.is_empty()== false {}'?それは明白であり、無駄な「let」はありません。 – Boiethios