日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
為什么f(i=-1,i=-1)是未定義行為?

問題:

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供商城企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為商城眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進行中。

最近在讀 order of evaluation violations,其中的一個例子使我很困惑。

1)如果對一個標(biāo)量對象的副作用相對于對這個標(biāo)量對象的另一個副作用是無序的,那么這是未定義行為。

 
 
  1. //代碼片段  
  2. f(i=-1,i=-1);//undefined behavior 未定義行為 

在這段代碼中,很明顯 i 是一個標(biāo)量對象。

算術(shù)類型(3.9.1),枚舉類型,指針類型,指針成員類型(3.9.2),空指針類型和被const或volatile修飾的類型(3.9.3)等統(tǒng)稱為標(biāo)量類型。

從這句話中我看不出上面那句代碼有什么分歧的地方。我認為不論***個參數(shù)還是第二個參數(shù)先執(zhí)行,i最終都是-1,并且兩個參數(shù)的值都是-1。

有人能解釋清楚這些嗎?

***答案:

既然運算是無序的,也就不能說分配任務(wù)的指令不能交錯執(zhí)行。也許會選擇***的方式去運行,由CPU的架構(gòu)來決定。引用下面這句話來說明:

如果A在B之前是無序的并且B在A之前是無序的,那么存在兩種可能性:

  • 預(yù)估A和B是無序的:它們可能以任意的順序運行并且可能會重疊(在一個線程的執(zhí)行中,編譯器可能會交錯組織包含A和B的CPU指令)。
  • 預(yù)估A和B是無法確定的順序:它們可能以任意順序運行但是一定不會重疊。或者A在B執(zhí)行之前完成或者B在A執(zhí)行之前完成。下一次執(zhí)行同樣的語句時,執(zhí)行的順序有可能是相反的。

假設(shè)運算執(zhí)行后,把-1存進一個內(nèi)存地址,就這個行為自身而言,這似乎并不會引發(fā)任何問題。但是如果一個指令和另一個指令交錯執(zhí)行操作同一個內(nèi)存地址,你不能說編譯器不會把這些指令優(yōu)化成一個獨立的具有同樣效果的指令集,這樣就會出錯了。

例如,假想把內(nèi)存清零然后再遞減是***效的?,F(xiàn)在開始值是-1,然后就是:

 
 
  1. 1 f(i=-1,i=-1)   

也許會變成:

 
 
  1. clear i //清空 i  
  2. clear i //清空 i  
  3. decr i //遞減 i  
  4. decr i //遞減 i 

現(xiàn)在i是-2。

這也許是一個假的例子,但可能是真的。

原文鏈接: stackoverflow   翻譯: 伯樂在線 - 閃了腰的企鵝

譯文鏈接: http://blog.jobbole.com/62650/


網(wǎng)站標(biāo)題:為什么f(i=-1,i=-1)是未定義行為?
地址分享:http://www.5511xx.com/article/cogchdp.html