Re: 十三誡增修--08:++i/i++和--i/i--順序影響結果

作者: cgcheng (..)   2016-06-09 22:48:41
※ 引述《wtchen (沒有存在感的人)》之銘言:
: 這篇有爭議,乾脆直接重寫,看大家認為如何
: (尤其希望C++的高手能補充或指正,特別是multithreading的部份)
: ==============================================================
: 08. ++i/i++ 和
作者: Caesar08 (Caesar)   2016-06-09 22:58:00
討論這部分的時候不會討論到multi thread,因為multi thread本來就要自己sync
作者: wtchen (沒有存在感的人)   2016-06-09 23:03:00
因為C++Standard有multithread的東西,想請問Standard對這方面到底是如何規定的?
作者: cgcheng (..)   2016-06-09 23:23:00
因為版主問了,所以我特地稍微查了一下c++11關於多線程看起來是把對多線程的支援度提高,實際使用上仍然需要觀念
作者: wtchen (沒有存在感的人)   2016-06-09 23:27:00
感謝,因為我大部份都用C所以C++比較不熟既然不會影響我就放心了
作者: cgcheng (..)   2016-06-09 23:28:00
不過我剛重看了一下討論串,caesar08你有參與討論?wtchen看得出你很仔細謹慎,我個人是頗欣賞,我所講的只是提醒加上手賤,never mind
作者: wtchen (沒有存在感的人)   2016-06-09 23:34:00
給新手看的東西要很小心,不要造成太大的誤解讓新手一開始觀念錯誤,所以謹慎為上。
作者: cgcheng (..)   2016-06-09 23:35:00
嘖嘖,所以一開始我其實不是很想發文,因為要很謹慎
作者: wtchen (沒有存在感的人)   2016-06-09 23:36:00
討論的時候無所謂啦,板工發的置底文就另當別論了 XD
作者: Caesar08 (Caesar)   2016-06-09 23:36:00
no。我只是要說,不需要考慮到multi thread的情況
作者: cgcheng (..)   2016-06-09 23:36:00
不過那個什麼逗號是分隔號還是運算元這個新人應該看不懂caesar08,y..我講同件事...但總覺得感覺哪邊怪怪的
作者: wtchen (沒有存在感的人)   2016-06-09 23:45:00
,運算符那邊要是沒人提我也不知道 XD不過,分隔號不算sequence point應該是必備常識
作者: cgcheng (..)   2016-06-09 23:48:00
常識?!其實在很久前我並不知道.後來就算知道了但還真的沒遇到讓我有機會去管這個差別的時刻好比有一條好像是說不要overload逗號,實際上就是不會有人這樣搞
作者: wtchen (沒有存在感的人)   2016-06-09 23:52:00
例如F(a(&x), b(&x)),如果a跟b都會改變該引數指標指向的變數(x),那結果就會看a先執行還是b先執行當然會這樣搞的應該很少....
作者: cgcheng (..)   2016-06-09 23:54:00
oh,boost好像有這樣幹,那那那當我沒常識好了func裡面再有func,好像也是,勾起我一點點回憶..不過很少倒是真的
作者: wtchen (沒有存在感的人)   2016-06-09 23:58:00
因為C有aliasing,如果觀念不太對寫出的code會很奇怪
作者: cgcheng (..)   2016-06-09 23:59:00
alias是啥
作者: wtchen (沒有存在感的人)   2016-06-10 00:00:00
雖然可以strict aliasing,可是有些高手也會用aliasing做些有的沒的特技。http://blog.tinlans.org/2010/01/09/strict-aliasing/
作者: Frozenmouse (*冰之鼠*)   2016-06-10 00:08:00
原本非題所涵蓋的範圍比現在的廣很多,改這樣感覺變成是只針對 ++ -- 而已了…原本非題→原本題目
作者: Hazukashiine (私は幸せです)   2016-06-10 00:12:00
其實我原本想到比較好的題目是:不要在兩個順序點之間,對同一個變數賦值
作者: cgcheng (..)   2016-06-10 00:13:00
wtchen謝謝,我看了一下覺得好像開-Wall就有機會避免Hazukashiine的題目不錯
作者: Hazukashiine (私は幸せです)   2016-06-10 00:16:00
嗚嗚被切掉了QQ ...,對同一個變數賦值兩次以上但是我覺得啊~越精確的解釋,新手真的越容易理解嗎
作者: cgcheng (..)   2016-06-10 00:18:00
當然不會理解
作者: Hazukashiine (私は幸せです)   2016-06-10 00:19:00
只是要避免寫出一些奇怪代碼而要去理解順序點是什麼
作者: cgcheng (..)   2016-06-10 00:19:00
只會讓他更亂而已 :)其實我反而好奇你不跟新人講,他就真的會寫出奇怪的東西?忘了問,wtchen所說的alias是指point來point去嗎?
作者: Hazukashiine (私は幸せです)   2016-06-10 00:24:00
也許會。因為我就做過這種事,在我是新手的時候 www
作者: cgcheng (..)   2016-06-10 00:24:00
回文還挺累的,小弟要先告退了..也許不會再回來看這串
作者: Frozenmouse (*冰之鼠*)   2016-06-10 00:26:00
第一次學++ --興奮到寫出奇怪的東西也是有可能的XD
作者: cgcheng (..)   2016-06-10 00:26:00
Hazukashiine,really?看來要學好程式真的很難
作者: Frozenmouse (*冰之鼠*)   2016-06-10 00:27:00
更不用說會有教授教這個…
作者: cgcheng (..)   2016-06-10 00:28:00
不才小弟第一個學lang的叫做quick basic QQ我不是資工的,不過一般計算機概論我肯定教授不會教這個XD
作者: wtchen (沒有存在感的人)   2016-06-10 00:29:00
Hazukashiine的題目我也想過,可是要跟新手解釋順序點好困難阿....而且++/--算是月經題了
作者: Hazukashiine (私は幸せです)   2016-06-10 00:30:00
對啊,想到就覺得會適得其反 XDDD
作者: wtchen (沒有存在感的人)   2016-06-10 00:31:00
alaising就是一個函式兩個以上pointer參數是同一個這樣...
作者: Hazukashiine (私は幸せです)   2016-06-10 00:31:00
所以我就想說用 在一個無順序點的表示式中...
作者: Hazukashiine (私は幸せです)   2016-06-10 00:32:00
一是邏輯等價的,二是也許看的人會直接無視順序點XD
作者: cgcheng (..)   2016-06-10 00:32:00
parameter同個pointer?有需要這樣子用阿?
作者: wtchen (沒有存在感的人)   2016-06-10 00:32:00
現在大學到底教不教順序點?如果有教的話怎麼老是有++/--的問題出現?
作者: Hazukashiine (私は幸せです)   2016-06-10 00:33:00
不教,因為這是實作的細節,不是程式語言理論基礎遇到的人,自己想辦法除錯啦,自己就會發現了吧應該
作者: wtchen (沒有存在感的人)   2016-06-10 00:34:00
cgcheng大不看這串OK,要回來看文發文就好....
作者: cgcheng (..)   2016-06-10 00:35:00
我怎麼覺得可以解讀為++/--學好就是一個破處的成長開始XD
作者: Hazukashiine (私は幸せです)   2016-06-10 00:35:00
老師也會儘可能不出那種自己為是要背優先級的爛題目以
作者: wtchen (沒有存在感的人)   2016-06-10 00:36:00
不過因為C++的作法跟C又有不同,所以原題目不太合適C++可以允許 ++++i這種寫法有人有更好的意見歡迎提出,集思廣益!
作者: Hazukashiine (私は幸せです)   2016-06-10 00:38:00
不然就擴展題目的範圍:不要做出語言未定義的性為?
作者: cgcheng (..)   2016-06-10 00:38:00
++++i因為可能還要考慮operator overload吧?
作者: cgcheng (..)   2016-06-10 00:39:00
你們討論的本來就到了實作上的細節,不過實際上到底要不要管這些都還很難說
作者: wtchen (沒有存在感的人)   2016-06-10 00:41:00
不要做出語言未定義的行為->未定義行為多到數不清~~
作者: Hazukashiine (私は幸せです)   2016-06-10 00:41:00
對啊 XDDD 沒錯啊 但是可以舉幾個常見會犯的例子
作者: cgcheng (..)   2016-06-10 00:42:00
我這個新手只會覺得哪來這麼多毛 :~~
作者: wtchen (沒有存在感的人)   2016-06-10 00:42:00
所以我盡可能舉例說明....但是C跟C++分歧已經越來越大
作者: Hazukashiine (私は幸せです)   2016-06-10 00:43:00
不過這會讓它與前面的東西重疊,修改字串常量就是UB
作者: wtchen (沒有存在感的人)   2016-06-10 00:43:00
要兼顧其實有點複雜,加上很多老師把C++當C教
作者: cgcheng (..)   2016-06-10 00:43:00
好吧,到這很明顯crazy,只是路過,很謝謝你們陪我 XD
作者: wtchen (沒有存在感的人)   2016-06-10 00:44:00
C++都快出到17了還在用C的語法...
作者: Hazukashiine (私は幸せです)   2016-06-10 00:45:00
不然就分成新手與進階兩種不同的內容(誤
作者: wtchen (沒有存在感的人)   2016-06-10 00:45:00
所以我才想說針對++/--就好,就如cgcheng說的,搞懂就很不容易了
作者: Hazukashiine (私は幸せです)   2016-06-10 16:33:00
沒有說不好,但是實在這樣下去越來越複雜也是不妥QQ
作者: wtchen (沒有存在感的人)   2016-06-10 16:50:00
我是覺得正確最重要,已經儘可能簡化了
作者: locklose (允)   2016-06-29 16:01:00
朝聖推

Links booklink

Contact Us: admin [ a t ] ucptt.com