C++表达式和左值

一表达式
在C++中,任何值或者任何有效值和运算符号的组合都是表达式 。
对任何表达式加上分号都可以成为语句。
如:
当判断表达式的值这种操作改变了内存中数据的值时,我们说表达式有副作用。因此,判定表达式会带来这样的副作用,即修改被复制者的值
10//值为10的表达式
10+10//值为20的表达式
x=20//表达式的值为20
x<y//这样的关系表达式将被判定为bool值
同时,C++规定,逗号表达式的值是第二部分(或最后一部分 )的值。
如:
int i ,j ,k= 0;
	i = (j = 20, k = 2 * j, j = 30 , j = -1);
	cout <<"i:" << i << endl;
	cout << "j:" << j << endl;
	cout << "k:" << k << endl;

	i = (j = 20, k = 2 * j);
	cout << "i:" << i << endl;
	cout << "j:" << j << endl;
	cout << "k:" << k << endl;
输出结果:
1
在所有运算符中,逗号运算符的优先级最低。
int num = 24,300; //set num 24
int num = (24,300);//set num 300

递增运算符和递减运算符
以几个特殊的式子为例:
int x = 0;
	int j = (4 + x++) + (6 + ++x);
	x = 0;
	int k = 2 * x++*(3 - ++x); //don;t do it except as an experiment
	x = 0;
	int z = (4 + x++) + (6 + ++x) + (--x);
	cout << j << endl;
	cout << k << endl;
	cout << z << endl;

输出结果(win10 ,vs2015):
12
4
10
解析:
第一个式子:(4+x++)不是一个完整的表达式,,整条赋值语句才是一个完整的表达式C++不保证x的值在计算(4+ x++)后立刻增1。只保证在下一条语句执行前,x增2.
第二个式子和第三个式子,在同一语句中通知执行 前++和后++,结果是不可预期的,与具体的系统有关。在本例子的环境中,先执行完所有的后递增操作,然后计算整个表达式,最后执行前递增操作。

指针递增:
//指针自增
	int arr[2] = { 0,2 };
	int*pt = arr;
	int *pt_2 = arr;
	++*pt;//++应用于pt指向的值,pt仍然指向arr[0]
	*++pt_2;//++应用于pt2,pt_2指向arr[1]
	printf("%d/n", ++*pt);
	printf("%d",*++pt_2);
输出结果1,2

另外关系运算符的优先级比算术运算符低  
如:
x + 3 > y -2;
等同于
(X + 3)>(y - 2);


二左值
可以通过以下两点来判定C++中的左值
1 有名字
2 可以在内存中寻址
所以左值都是可以被修改的。
 如:
x=20//左值,表达式为x的值
++x//左值,表达式为x的值
x+20//非左值,返回中间值,临时对象
x==//非左值,返回中间值,临时对象




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值