LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 292|回复: 0

C++ 序列点

[复制链接]
发表于 2024-1-21 23:33:44 | 显示全部楼层 |阅读模式
在连续的“序列点”之间,表达式只能修改对象的值一次。

C++ 语言定义当前未指定序列点。 Microsoft C++ 对涉及 C 运算符但不涉及重载运算符的任何表达式使用与 ANSI C 相同的序列点。 当重载运算符时,语义从运算符排序更改为函数调用排序。 Microsoft C++ 使用以下序列点:

逻辑“与”运算符 (&&) 的左操作数。 完全计算逻辑“与”运算符的左操作数,并在继续之前完成所有副作用。 不保证一定会计算逻辑“与”运算符的右操作数。

逻辑“或”运算符 (||) 的左操作数。 完全计算逻辑“或”运算符的左操作数,并在继续之前完成所有副作用。 不保证一定会计算逻辑“或”运算符的右操作数。

逗号运算符的左操作数。 完全计算逗号运算符的左操作数,并在继续之前完成所有副作用。 始终计算逗号运算符的两个操作数。

函数调用运算符。 计算函数调用表达式以及函数的所有自变量(包括默认自变量),并在进入函数之前完成所有副作用。 在自变量或函数调用表达式之间没有指定的计算顺序。

条件运算符的第一个操作数。 完全计算条件运算符的第一个操作数,并在继续之前完成所有副作用。

完整的初始化表达式的末尾,如声明语句中的初始化的末尾。

表达式语句中的表达式。 表达式语句由可选表达式后跟分号 (; ) 组成。 表达式为其副作用完全计算。

选择(if 或 switch)语句中的控制表达式。 完全计算该表达式,并在执行依赖于选择的代码之前完成所有副作用。

while 或 do 语句的控制表达式。 完全计算该表达式,并在执行 while 或 do 循环的下一次迭代中的任何语句之前完成所有副作用。

for 语句的所有三个表达式。 完全计算每个表达式,并在移动到下一个表达式之前完成所有副作用。

return 语句中的表达式。 完全计算该表达式,并在控制权返回到调用函数之前完成所有副作用。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表