求解 关于++a = 10;合法,a++ = 10;不合法

colorblue 2012-01-18 11:37:31
c与指针书上写到:
int a = 0;
++a = 10;
++a的结果是a的值的拷贝,并不是变量本身,你无法想一个值赋值;
然后我用vc6编译下是可以的,但是a++ = 10;有语法错误, error:= 左边必须是变量;
求高手赐教;
...全文
410 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamnobody 2012-01-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pathuang68 的回复:]
就是这样的。

++a用的是a的引用,因此可以作为左值
a++用的是对象拷贝,一次不能作为左值

这也是为什么在for循环中,++i比i++快的原因,当然如果编译器对此做了专门的优化的话,那么从性能上来说是没有区别的。
[/Quote]
在C语言中,++a,a++都是右值表达式。=号左操作数要求是左值表达式,所以两者都是错的。
但是在C++中,++a是右值表达式。所以在C++中符合语法。
c++03标准是未定义行为,c++11标准不是未定义的。
pathuang68 2012-01-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pathuang68 的回复:]

就是这样的。

++a用的是a的引用,因此可以作为左值
a++用的是对象拷贝,一次不能作为左值

这也是为什么在for循环中,++i比i++快的原因,当然如果编译器对此做了专门的优化的话,那么从性能上来说是没有区别的。
[/Quote]

按错了键,还没有说完就直接回复了:)

修改上面回复的typo:
++a用的是a的引用,因此可以作为左值
a++用的是对象拷贝,因此(一次)不能作为左值

这也是为什么在for循环中,++i比i++快的原因,当然如果编译器对此做了专门的优化的话,那么从性能上来说是没有区别的。

因此严格地说,++a = 0在语法上是正确的(grammartically correct),而a++ = 0在语法上是错误的(grammartically wrong)。但是两种写法在语义上都不正确(semantically wrong)
peng_weida 2012-01-18
  • 打赏
  • 举报
回复
原来如此
[Quote=引用 2 楼 pathuang68 的回复:]

就是这样的。

++a用的是a的引用,因此可以作为左值
a++用的是对象拷贝,因此不能作为左值

这也是为什么在for循环中,++i比i++快的原因,当然如果编译器对此做了专门的优化的话,那么从性能上来说是没有区别的。
[/Quote]
arfi 2012-01-18
  • 打赏
  • 举报
回复
还是真不懂,估计和编译器自身相关。

在 linux 下,++a = 10; 也是编译不过的。

test2.c: In function ¡®main¡¯:
test2.c:7: error: lvalue required as left operand of assignment
面包大师 2012-01-18
  • 打赏
  • 举报
回复
编译器的问题,只能表明a++ = 10这句不符合VC6的语法,出现了语法错误,但不一定表示这句就是错的
pathuang68 2012-01-18
  • 打赏
  • 举报
回复
就是这样的。

++a用的是a的引用,因此可以作为左值
a++用的是对象拷贝,一次不能作为左值

这也是为什么在for循环中,++i比i++快的原因,当然如果编译器对此做了专门的优化的话,那么从性能上来说是没有区别的。
Trinx 2012-01-18
  • 打赏
  • 举报
回复
那两种写法都是有问题的,何必追究。
proorck6 2012-01-18
  • 打赏
  • 举报
回复
学生代码
正规程序员应该不会在这个问题上纠缠。
mingchaoyan 2012-01-18
  • 打赏
  • 举报
回复
这些在学习时钻钻牛角尖,工作时基本 不会这么写
daviddb7 2012-01-18
  • 打赏
  • 举报
回复
真纠结,简单的说
++a=10就是a=10;a+1;
a++=10就是a+1=10,怎么能赋值
另外++这种操作要看编译器是怎么解释的了,结果很可能不一样,所以不推荐++和=放在一条语句里执行。
colorblue 2012-01-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pathuang68 的回复:]
就是这样的。

++a用的是a的引用,因此可以作为左值
a++用的是对象拷贝,一次不能作为左值

这也是为什么在for循环中,++i比i++快的原因,当然如果编译器对此做了专门的优化的话,那么从性能上来说是没有区别的。
[/Quote]

学习了,呵呵

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧