关于++运算符,哪一种方法是对的?

C语言 码拜 9年前 (2015-05-11) 926次浏览 0个评论
 

有如下代码:
p[n] = p1[n];
n ++;

我想把两行并成一行,这样:
p[n++] = p1[n];

或者:
p[n] = p1[n++];

哪一种是对的?或者两种都不对?

看了置顶的贴子,发现这两种方式都不对。因为“=”号并不是一个顺序点。是吗?
两种都可以实现你想要的结果。
20分
感觉上p[n++] = p1[n];和p[n] = p1[n++];和都是先实现
p[n] = p1[n];
再实现
n ++;
因为是后++,所以先执行完操作才自加,感觉都能实现
关于++,–
标准C++定义为
1、在前,变量首先自增,然后再计算表达式
2、在后,首先计算表达式,然后变量自增

但是,有的编译器有bug,比如vc++6.0,无法计算出连续三个前++  例如 int a = ++n + ++n + ++n;
所以,论坛中有个赵四老师说过,尽量不要写自己都无法确定结果的表达式,该用()的加()

两种都不对啊
不确定的行为,建议不要这样写

而且从美观角度说,我觉得写成两行更好,因为写成一行破坏了对称美观。。

引用 2 楼 a30037338 的回复:

两种都可以实现你想要的结果。

别误导楼主 
你学学楼主去看看置顶帖再说

引用 4 楼 Minikinfish 的回复:

关于++,–
标准C++定义为
1、在前,变量首先自增,然后再计算表达式
2、在后,首先计算表达式,然后变量自增

但是,有的编译器有bug,比如vc++6.0,无法计算出连续三个前++  例如 int a = ++n + ++n + ++n;
所以,论坛中有个赵四老师说过,尽量不要写自己都无法确定结果的表达式,该用()的加()

不是编译器BUG
别信口雌黄

分两行写

p[n] = p1[n];
n ++;
引用 7 楼 lin5161678 的回复:

你学学楼主去看看置顶帖再说

我看过, 我想说的是谁见过哪个操作系统中或者用什么编译器, 使
p[n++] = p1[n];  
 不等价于
p[n] = p1[n];
n ++;
反正我没见过

http://bbs.csdn.net/topics/370153775
引用 10 楼 a30037338 的回复:

我看过, 我想说的是谁见过哪个操作系统中或者用什么编译器, 使
p[n++] = p1[n];  
 不等价于
p[n] = p1[n];
n ++;
反正我没见过

你见识少是你自己的问题 
不是你误导别人的理由

关于++运算符,哪一种方法是对的?

引用 12 楼 lin5161678 的回复:

你见识少是你自己的问题 
不是你误导别人的理由

在我没见过之前, 别人说的始终是别人说的, 你这是什么编译器, 我要自己试试。

引用 楼主 mbctb 的回复:

有如下代码:
p[n] = p1[n];
n ++;

我想把两行并成一行,这样:
p[n++] = p1[n];

或者:
p[n] = p1[n++];

哪一种是对的?或者两种都不对?

抛开对错不谈,你为什么要合并?
仅仅为了少一行代码吗?
你这样做会给维护带来多大困难,你知道吗?尤其是别人来维护这段代码的时候。

很多时候,代码的可读性远远比代码性能重要。
PS:目前还没有遇到过因为强调可读性而导致性能下降,无法验收的情况!切记切记

引用 13 楼 a30037338 的回复:
Quote: 引用 12 楼 lin5161678 的回复:

你见识少是你自己的问题 
不是你误导别人的理由

在我没见过之前, 别人说的始终是别人说的, 你这是什么编译器, 我要自己试试。

在线编译器 IDEONE.COM

引用 15 楼 lin5161678 的回复:

在线编译器 IDEONE.COM

见识了,   你应该早点把这种强有力的证据拿出来啊

引用 16 楼 a30037338 的回复:
Quote: 引用 15 楼 lin5161678 的回复:

在线编译器 IDEONE.COM

见识了,   你应该早点把这种强有力的证据拿出来啊

因为 置顶帖是比这个主线编译器更有力的证据 

引用 17 楼 lin5161678 的回复:
Quote: 引用 16 楼 a30037338 的回复:
Quote: 引用 15 楼 lin5161678 的回复:

在线编译器 IDEONE.COM

见识了,   你应该早点把这种强有力的证据拿出来啊

因为 置顶帖是比这个主线编译器更有力的证据 

置顶帖没啥价值,罗里八索,很简单的东西说得无比复杂,不值一喷。

两种都不对,与先前想要的结果不一样吧
p[n] = p1[n];
n ++;
建议就这样写

要不就这样
i = 0;
j = 0;
p[i++] = p1[j++];

分开写
编译器行为。结果是未定义的。。。不同的编译器结果不同。本来就不能这么写。。 
原来的写法多好的,适合后期的代码维护。
有时候,不一定要追求所谓的“效率高”“代码段“
比如我曾经看过一份代码中,很有印象的这样写来取数组的内容的(类似,变量名可能不一样)

int nValue = globleValueArray[++User[n++].getValue[++n].m]

当时我就跪了。。。

引用 23 楼 void998 的回复:

原来的写法多好的,适合后期的代码维护。
有时候,不一定要追求所谓的“效率高”“代码段“
比如我曾经看过一份代码中,很有印象的这样写来取数组的内容的(类似,变量名可能不一样)

int nValue = globleValueArray[++User[n++].getValue[++n].m]

当时我就跪了。。。

哈哈,强大

建议重载++,来验证一下顺序。
引用 24 楼 u012578046 的回复:
Quote: 引用 23 楼 void998 的回复:

原来的写法多好的,适合后期的代码维护。
有时候,不一定要追求所谓的“效率高”“代码段“
比如我曾经看过一份代码中,很有印象的这样写来取数组的内容的(类似,变量名可能不一样)

int nValue = globleValueArray[++User[n++].getValue[++n].m]

当时我就跪了。。。

哈哈,强大

事实,没办法,有的人就是喜欢卖弄代码技巧,完全不考虑代码要给别人看,别人维护,坑。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于++运算符,哪一种方法是对的?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!