※ 引述《saladim (殺拉頂)》之銘言:
: 小弟對於13誡之八有點疑惑, 主要在第二個敘述, 以下引述第八誡:
: ===========
: 你不可以在一個運算式(expression)中,對一個基本型態的變數修改其值
: 超過一次以上。否則,將導致未定義的行為(undefined behavior)
(++i)+(i++)
敘述一是說不可以在一條運算式中對某個變數在不同的地方改變值
: 你也不可以在一個運算式(expression)中,對一個基本型態的變數修改其值,
: 而且還在同一個式子的其他地方為了其他目的而存取該變數的值。(其他目的
: 是指不是為了計算這個變數的新值的目的)。否則,將導致未定義的行為。
敘述二是說不可以在一條運算式中的一個地方對某個變數改變值,
又在"同一條運算式的另一個地方"讀取此變數的值
int i=0;
cout<<i<<" "<<++i<<endl; //未定義,取自C++ primer 5th 簡中版P.123
先求++i=> 輸出1 1
先求 i=> 輸出0 1
敘述一,二會出問題都是因為求值順序未定義
: ===========
: 第二個敘述中: "其他目的,是指不是為了計算這個變數的新值的目的"
: 我的疑惑在於, 此敘述似乎暗指 若是為了計算此變數新值的話 仍然可以讀取該變數的值
: 但是似乎又不合理 因為想不出任何是為了計算變數新值修改到此變數又去讀取的例子
: 再者, 也會違反八誡的第一個敘述阿??
: x = x++ * x ; <====這樣算是一個case嗎? ------ (A)
: 也就是說 一般的用法 一個運算式(如同上面的整個式子A)不就是要計算新值的嗎?
: 那不允許在此目的之外修改某變數再去讀取此變數 不就同等於可以這麼做 @_@?
: 搞不清楚阿..............
: 請各位大大幫忙解惑一下 似乎我有哪邊對於第二個敘述理解錯誤了.....
: 謝謝~~~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.52.137
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1401816400.A.74C.html