好吧,我有點尷尬地問這個問題,但我只是想確定一下...眾所周知,C在布爾表達式中使用短路評估:int c = 0;if (c && func(c)) { /* whatever... */ }在該示例func(c)中未調(diào)用,因為c計算結(jié)果為0。但是,在比較復(fù)雜的例子中,比較的副作用會改變接下來要比較的變量嗎?像這樣:int c; /* this is not even initialized... */if (canInitWithSomeValue(&c) && c == SOMETHING) { /*...*/ }函數(shù)canInitWithSomeValue返回true并在成功的情況下更改給定指針的值。是否保證后續(xù)比較(c == SOMETHING在此示例中)使用設(shè)置的值canInitWithSomeValue(&c)?編譯器使用了多么繁重的優(yōu)化?
短路評估和副作用
慕碼人2483693
2019-11-20 10:19:50