2016-12-01 121 views
1

我只是想知道寫一些代碼時彈出到腦海裏的東西。if/else-if語句如何處理?

for (int i = 0; i < num_bits; i++) { 
     if (bits.at(i) == 0) { 

     } 

    else if (bits.at(i) == 1) { 

    } 
} 

在此代碼,bits是一個字符串,num_bits是字符串的長度。

在這種情況下,程序是否會在if和`else if`處運行string.at(i),或者它會運行一次,然後將其存儲在某處並在兩個語句中使用它?我不知道這個問題是否足夠清楚,但謝謝任何答案。

回答

1

想一想。引擎如何知道每個對該函數的調用都會產生相同的結果?

+0

謝謝,那是我最初的想法。你認爲將字符串轉換爲char數組或類似的東西會更有效率,而不是始終調用函數嗎? – user2851949

+0

首先將值存儲到變量並與變量進行比較,您只需調用一次該方法。或者你可以在-O1或更高版本上使用位[i] – Hampus

+1

g ++,它足夠聰明,可以爲你創建臨時文件。請注意,程序集與[(])(https://godbolt.org/g/XVleS5)和[without](https://godbolt.org/g/ecH5gI)是相同的臨時表。 –

0

無論何時調用它,它都會運行該函數,所以對於此示例2次。您可以在for循環的頂部聲明它,或者如果您需要執行更多繁重的操作,可以使用foreach。