精華區beta C_and_CPP 關於我們 聯絡資訊
※ 引述《fishforpt (游來游去的)》之銘言: : 如你所說在Java這樣的規則下 : 就是第三行的z++ 先算 z同時取值 : 所以後面的z還是取原先的數值 而不是+1後的z值對嗎? 你所說的,上面ㄧ行這樣做,就是下面二行那樣做. 講的是同一種讀法. : 不同於 C的即是 在PRINT("%d",z++ + z)下 : C不會先把 z++ 先算而是直接拿原來的z值下去做z + z的動作 : 而在結束segment後才將z+1 : 這樣理解應該就沒錯了對吧!! 先跩文一下,稍微看一下C++規格書,得到的基本印象大概為: 1.Expression的所有子計算式都根據operator precedence結合,就決定其計算順序. 此順序不能隨便交換. (ISO/IEC 14882 1.9 Program execution 12到15段) 2.每一個statement的side effect都在下個statement執行之前完成. (ISO/IEC 14882 6.2 Expression statement 1段) 其他相關知識,我不曉得該查規格書哪個段落. 在C, (z++ + z) 這個式子執行起來必須是 (z + z, z++) 的意思. 也就是你所說的,在式子中,後面z還是取未套用postfix ++的值. 其實前面z也是. 而postfix ++是在這個statement執行之後發生的,且在下一個statement之前完成. 而Java規定的執行規則說, (z++ + z)執行起來,必須是 (z++, z, z + z) 的意思. 在右邊z取值之前,z已經先做完++了. -- pTT:灌C可以搞阿嬌啊? :我的Visual C++光碟哪裏去了? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.160.114.86