※ 引述《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