社区
C语言
帖子详情
c语言中的赋值运算符是一个顺序点吗
橡皮擦
2012-02-24 06:39:38
c语言中的赋值运算符是一个顺序点吗
...全文
184
5
打赏
收藏
c语言中的赋值运算符是一个顺序点吗
c语言中的赋值运算符是一个顺序点吗
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zj小潘
2012-02-24
打赏
举报
回复
[Quote=引用 1 楼 zhutou100hao 的回复:]
顺序点?
[/Quote]
参见:http://blog.csdn.net/scorpio16/article/details/1556235
全英文版解释:http://en.wikipedia.org/wiki/Sequence_point
whc748227431
2012-02-24
打赏
举报
回复
在百度上帮你找的:
int i = 3;
int k=(++i)+(++i)+(++i);
执行后k的值是多少?不同的编译器有不同的结果,可能是16(gcc),也可能是18(vc)。为什么会这样呢?
在C++标准中有一个很重要的概念:sequence points(顺序点)。原文定义如下:
At certain specified points in the execution sequence called sequence points, all side effects of previous evaluations shall be complete and no side effects of subsequent evaluations shall have taken place.
大致意思是说:在执行顺序中某些指定的点叫做顺序点。这个点上,之前所有的赋值所产生的副作用都已发生完成,并且在其后的赋值不能在该点产生任何副作用。
那么什么是副作用?C++标准指出:访问一个由可变的左值(volatile lvalue)指派的对象(basic.lval),修改一个对象,调用库I/O函数,或者调用函数等所有这些能够改变执行环境的状态的操作都是副作用。
听起来感觉有些绕口而且不容易理解。那么来看看都有哪些点是顺序点也许会帮助我们更好的理解。
分号;
未重载的逗号运算符的左操作数赋值之后(即“,”处);
未重载的”||”运算符的左操作数赋值之后(即“||”处);
未重载的“&&”运算符的左操作数赋值之后(即"&&"处);
三元运算符“? : ”的左操作数赋值之后(即“?”处);
在函数所有参数赋值之后但在函数第一条语句执行之前;
在函数返回值已拷贝给调用者之后但在该函数之外的代码执行之前;
每个基类和成员初始化之后。
那么这个顺序点有什么用呢?在标准中规定:在两个顺序点之间,一个数值对象最多只能由表达式赋值修改一次。而对于其他的行为不给予明确定义。
那么在回过头来看这条语句:
int k=(++i)+(++i)+(++i);
由于此处顺序点就是分号,因此这条语句应该只修改一次i的值。对于多次的i自增值运算,由于标准并没有明确定义,因此各个编译器处理这种情况的方法也不同。这就出现了本文开头的结果。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/scorpio16/archive/2007/04/08/1556235.aspx
iamnobody
2012-02-24
打赏
举报
回复
顺序点位于:
1. 每个完整表达式结束时。完整表达式包括变量初始化表达式,表达式语句,return语句的表达式,以及条件、循环和switch语句的控制表达式(for头部有三个控制表达式);
2. 运算符 &&、||、?: 和逗号运算符的第一个运算对象计算之后;
3. 函数调用中对所有实际参数和函数名表达式(需要调用的函数也可能通过表达式描述)的求值完成之后(进入函数体之前)。
http://topic.csdn.net/u/20110826/09/601ebe9c-c2ae-4d63-a4e2-506c618bb654.html?19470
iamnobody
2012-02-24
打赏
举报
回复
不是.
猪头小哥
2012-02-24
打赏
举报
回复
顺序点?
C语言
所有
运算符
优先级详细说明
在
C语言
中
,
运算符
的优先级是指在进行运算...
C语言
中
的
运算符
可以分为以下几类:算术
运算符
、关系
运算符
、逻辑
运算符
、位
运算符
、
赋值
运算符
以及其他一些特殊
运算符
。下面是
C语言
中
所有
运算符
的优先级,从高到低排列:
32个关键字.pdf
有时候想找哪个
运算符
优先级高时,很多时候总是想找的就没有,真让人气愤!现在,我自己用心总结出来的
C语言
32...除了
赋值
运算符
、条件
运算符
、单目
运算符
三类的平级
运算符
之间的结合
顺序
是从右至左,其他都是从左至右
C语言
位操作视频精讲-
C语言
专题第二部分
本课程的目标是让大家彻底掌握
C语言
中
位
运算符
及常规技巧,这些知识在嵌入式代码
中
用的很多,尤其是设置寄存器以操控硬件时,很多同学被卡在这里。
本人改写的
C语言
解释器C++类
C++脚本解释器支持的
运算符
包括:
赋值
运算符
、算术
运算符
、关系
运算符
、逻辑
运算符
; C++脚本解释器应支持以下的结构:
顺序
结构、选择结构、循环结构; 如:if/else switch while for等
c语言
10种复合
赋值
运算符
,
C语言
复合
赋值
运算符
C语言
复合
赋值
运算符
在
C语言
的
赋值
中
有一种特殊的
赋值
运算符
,就是复合
赋值
运算符
。下面是关于
C语言
复合
赋值
运算符
的'相关介绍!复合
赋值
运算符
就是在
赋值
符“=”之前加上其它二目
运算符
可构成。比如大家可能最常...
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章