Re: [問題] 13誡之八的疑惑
※ 引述《RealJack ()》之銘言:
: ※ 引述《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
: 敘述一,二會出問題都是因為求值順序未定義
謝謝 這個例子替我解答了部分疑惑 這樣的一個statement的確不是純粹是計算值而已
其實另一個疑惑是 此敘述說不可以因為目的AA(用符號代表) 而在同一個expr
內修改值後再去存取該變數 那我就想問: 那若不是因為AA呢? 若是因為AA就
可以再次存取嗎?
不是目的AA : 為了計算這個變數的新值的目的 或是 其他 ---- (1)
AA : 不是為了計算這個變數的新值的目的 ---- (2)
(反反邏輯??)
根據(1)(2)跟大大的例子 似乎就有矛盾了 或是:
int sum = ++a + a ; // inspired by putumaxally
這就是疑惑之處.........@_@
: : ===========
: : 第二個敘述中: "其他目的,是指不是為了計算這個變數的新值的目的"
: : 我的疑惑在於, 此敘述似乎暗指 若是為了計算此變數新值的話 仍然可以讀取該變數的值
: : 但是似乎又不合理 因為想不出任何是為了計算變數新值修改到此變數又去讀取的例子
: : 再者, 也會違反八誡的第一個敘述阿??
: : x = x++ * x ; <====這樣算是一個case嗎? ------ (A)
: : 也就是說 一般的用法 一個運算式(如同上面的整個式子A)不就是要計算新值的嗎?
: : 那不允許在此目的之外修改某變數再去讀取此變數 不就同等於可以這麼做 @_@?
: : 搞不清楚阿..............
: : 請各位大大幫忙解惑一下 似乎我有哪邊對於第二個敘述理解錯誤了.....
: : 謝謝~~~
把原文章的推文列在此 ;
推
06/03 23:55,
06/03 23:55
這個似乎可以用敘述一處理?
推
06/04 00:18,
06/04 00:18
→
06/04 00:19,
06/04 00:19
→
06/04 00:20,
06/04 00:20
其實我覺得八誡的整個精神好像可以用pur大說的囊括就可以了 只要寫入過
不論讀取或是再寫入 都會有問題(再寫入也是可能需要再讀取阿~)
只是細讀一下第二敘述又怕哪裡想錯了 想請各路高手幫觧 XDDDD
推
06/04 01:31,
06/04 01:31
感謝 需要時間理解 不過現在無法直接運用阿阿阿阿阿阿
總結:
小魯對於八誡的第二個敘述理解上有些問題(已說明在上面) 對於此誡的精神我的理解是:
只要在同一個運算式修改過變數 則在同一運算式內不論是再讀取或是再修改 皆會有沒定
義的行為出現
似乎此誡的第二個敘述是在說明讀取那方面 只是敘述上有點令人疑惑
不知道是否如此?
煩請各路英雄幫忙 謝謝~~~~~~~~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.129.21.176
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1401920661.A.2BE.html
※ 編輯: saladim (220.129.21.176), 06/05/2014 06:25:15
※ 編輯: saladim (220.129.21.176), 06/05/2014 06:26:24
※ 編輯: saladim (220.129.21.176), 06/05/2014 06:27:39
※ 編輯: saladim (220.129.21.176), 06/05/2014 06:30:27
推
06/05 10:50, , 1F
06/05 10:50, 1F
→
06/05 10:53, , 2F
06/05 10:53, 2F
推
06/05 14:16, , 3F
06/05 14:16, 3F
→
06/05 14:19, , 4F
06/05 14:19, 4F
→
06/05 14:25, , 5F
06/05 14:25, 5F
→
06/05 14:28, , 6F
06/05 14:28, 6F
→
06/05 14:29, , 7F
06/05 14:29, 7F
推
06/05 22:57, , 8F
06/05 22:57, 8F
※ 編輯: saladim (36.228.235.166), 06/06/2014 01:31:53
推
06/06 02:52, , 9F
06/06 02:52, 9F
→
06/06 02:52, , 10F
06/06 02:52, 10F
→
06/07 07:51, , 11F
06/07 07:51, 11F
→
06/07 07:52, , 12F
06/07 07:52, 12F
→
06/07 07:53, , 13F
06/07 07:53, 13F
→
06/07 07:54, , 14F
06/07 07:54, 14F
推
06/07 12:05, , 15F
06/07 12:05, 15F
→
06/07 12:07, , 16F
06/07 12:07, 16F
→
06/08 20:16, , 17F
06/08 20:16, 17F
→
06/08 20:17, , 18F
06/08 20:17, 18F
推
06/08 21:21, , 19F
06/08 21:21, 19F
→
06/08 21:22, , 20F
06/08 21:22, 20F
→
06/08 21:23, , 21F
06/08 21:23, 21F
→
06/08 21:25, , 22F
06/08 21:25, 22F
→
06/08 21:25, , 23F
06/08 21:25, 23F
→
06/08 21:26, , 24F
06/08 21:26, 24F
推
06/08 21:39, , 25F
06/08 21:39, 25F
→
06/08 21:40, , 26F
06/08 21:40, 26F
→
06/08 21:41, , 27F
06/08 21:41, 27F
→
06/08 21:41, , 28F
06/08 21:41, 28F
→
06/08 21:41, , 29F
06/08 21:41, 29F
→
06/08 21:42, , 30F
06/08 21:42, 30F
→
06/08 21:42, , 31F
06/08 21:42, 31F
推
06/08 21:47, , 32F
06/08 21:47, 32F
討論串 (同標題文章)