第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

短路評估和副作用

短路評估和副作用

C
慕碼人2483693 2019-11-20 10:19:50
好吧,我有點尷尬地問這個問題,但我只是想確定一下...眾所周知,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)化?
查看完整描述

3 回答

?
不負相思意

TA貢獻1777條經(jīng)驗 獲得超10個贊

是否保證后續(xù)比較(在本例中為c == SOMETHING)使用canInitWithSomeValue(&c)設(shè)置的值?


是。因為有一個序列點


在對&&(邏輯AND),||(邏輯OR)和逗號運算符的左右操作數(shù)求值之間。例如,在表達式中*p++ != 0 && *q++ != 0,子表達式* p ++!= 0的所有副作用都在嘗試訪問q之前完成。


順序點定義了計算機程序執(zhí)行中可以保證執(zhí)行先前評估的所有副作用且尚未執(zhí)行來自后續(xù)評估的副作用的任何點。


查看完整回答
反對 回復(fù) 2019-11-20
?
ABOUTYOU

TA貢獻1812條經(jīng)驗 獲得超5個贊

是。因為&&||運算符也都稱為序列點。后者定義了何時應(yīng)該完成上一個操作的副作用,而下一個副作用應(yīng)該何時開始。


查看完整回答
反對 回復(fù) 2019-11-20
?
慕尼黑的夜晚無繁華

TA貢獻1864條經(jīng)驗 獲得超6個贊

if語句復(fù)合條件內(nèi)的評估嚴格從左至右。如果要優(yōu)化第二個測試的唯一情況是,編譯器是否可以100%地確定第一個測試等于false。


查看完整回答
反對 回復(fù) 2019-11-20
  • 3 回答
  • 0 關(guān)注
  • 471 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號