没有合适的资源?快使用搜索试试~ 我知道了~
表达式根据其运算符的优先级和分组来计算。 计算顺序 请看以下示例: // expre_pluslang__pluslang_Order_of_Evaluation.cpp // compile with: /EHsc #include <iostream> using namespace std; int main() { int a = 2, b = 4, c = 9; cout << a + b * c << \n; cout << a + (b * c) << \n; cout << (a + b) * c << \n; } Output: 38 3
资源详情
资源评论
资源推荐
详解详解C++编程中表达式的语义与计算顺序编程中表达式的语义与计算顺序
表达式根据其运算符的优先级和分组来计算。
计算顺序计算顺序
请看以下示例:
// expre_pluslang__pluslang_Order_of_Evaluation.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main()
{
int a = 2, b = 4, c = 9;
cout << a + b * c << "";
cout << a + (b * c) << "";
cout << (a + b) * c << "";
}
Output:
38
38
54
表达式计算顺序表达式计算顺序
上图中显示的表达式的计算顺序取决于运算符的优先级和关联性:
乘法 (*) 在此表达式中具有最高优先级;因此子表达式 b * c 首先计算。
加法 (+) 具有第二高的优先级,因此,a 将与 b 和 c 的乘积相加。
左移 (<<) 在此表达式中具有最低的优先级,但有两个匹配项。由于左移运算符从左到右分组,因此先计算左子表达式,再计
算右子表达式。
当使用括号为子表达式分组时,它们将更改表达式的计算优先级和顺序,如下图所示。
带括号的表达式计算顺序
类似于上图的表达式的计算纯粹是为了展示副作用 – 在本例中是将信息转移到标准输出设备。
表达式中的表示法
在指定操作数时,C++ 语言指定某些兼容性。下表显示需要类型为 type 的操作数的运算符可接受的操作数的类型。
运算符可接受的操作数类型
HHHHHHHHHHHHHHHHHHH1
不明确的表达式
某些表达式的意义不明确。当在同一表达式中多次修改对象的值时,这些表达式最常见。当语言没有定义表达式的计算顺序
时,这些表达式依赖于特定的顺序计算。请看下面的示例:
int i = 7;
func( i, ++i );
C++ 语言不保证计算函数调用的参数的顺序。因此,在前面的示例中,func 的参数可以接受值 7 和 8 或 8 和 8,取决于参数
是从左到右还是从右到左计算。
C++ 序列点(序列点(Microsoft 专用)专用)
在连续的“序列点”之间,表达式只能修改对象的值一次。
C++ 语言定义当前未指定序列点。Microsoft C++ 对涉及 C 运算符但不涉及重载运算符的任何表达式使用与 ANSI C 相同的序
列点。当重载运算符时,语义从运算符排序更改为函数调用排序。Microsoft C++ 使用以下序列点:
weixin_38635092
- 粉丝: 3
- 资源: 926
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0