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