出於效率原因(雖然非常小),我想聲明並在if條件塊內分配一個變量。爲什麼我不能把聲明和邏輯運算符放在一起?
I.e.而不是說
if(a != 0 && a->b >= 10){
int c = a->b
...
}
我想在第一個地方這樣做,我得到的編譯錯誤的分配INT C和說
if(a != 0 && (int c = a->b) >= 10){
...
}
在其最直接的方式(對我來說)。有沒有人知道是否/不可能在C++中做到這一點?
出於效率原因(雖然非常小),我想聲明並在if條件塊內分配一個變量。爲什麼我不能把聲明和邏輯運算符放在一起?
I.e.而不是說
if(a != 0 && a->b >= 10){
int c = a->b
...
}
我想在第一個地方這樣做,我得到的編譯錯誤的分配INT C和說
if(a != 0 && (int c = a->b) >= 10){
...
}
在其最直接的方式(對我來說)。有沒有人知道是否/不可能在C++中做到這一點?
爲什麼你認爲這會優化任何東西?
即使假設你可以在條件內聲明和初始化一個變量(這在C++中是不可能的,因爲編譯器需要可以評估的東西並且聲明不會返回任何東西),每次都會這樣做評估條件(除非你縮短它,這是你的代碼段中的情況),但無論如何不會有任何改變:無論你在哪裏,你仍然在聲明和初始化一個變量。
它會工作,如果你有它在第一個條件。然而,相比之前在這種情況下,分配和你不會得到你想要的
int a = 3;
int x = 0;
if (bool b = a > 5 && x < 2) {
printf("%d",b);
}
嗯,順序對我很重要因爲我第一次檢查對象是否存在以便調用它的函數。 – negin
int c = (a == 0 ? 0 : a->b);
if(a != 0 && c >= 10){
...
}
如果你想避免使用a->b
多次。
感謝Patrik的建議,這個想法很有效,但有一個缺點,就是將變量c定義在一個比所需範圍更大的範圍內。 – negin
「不成熟的優化是萬惡之源」 - Donald Knuth。 –
我很困惑..你用'a->'和'a.'訪問b哪一個? –
您不能在C++編譯器期望布爾語句的地方進行分配。 –