C++中的左值示例
使用的编译器:gcc 5.4.0
比较少关注到的左值
1. a = b
,这个表达式是左值,其返回值是a,比如:
int a;
int b = 100;
(a = b) = 200;
printf("a=%d\n", a); // 得到的结果是 a=200
printf("&a=%p\n", &a);
printf("&(a = b)=%p\n", &(a = b)); // 这个得到的结果和是a的地址是一样的
a = b = c
同样是左值,其返回值是a;
a = 100
同样是左值,(a = 100) = 200
得到的结果是a = 200;
2. a += b
,这个表达式是左值,其返回值是a;
3. ++a
、--a
这样的内建的前置自增与前置自减表达式也是左值,其返回值是a,比如:
int a = 100;
++a = 1000;
printf("a=%d\n", a); // 得到的结果是 a=1000
4. 逗号表达式也是左值,比如(a, b)
是左值,其返回值是b,比如
int a = 1, b = 2, c = 3;
int d = (a, b, c);
printf("d = %d\n", d); // d的值和c的值一样
printf("c = %p\n", &c);
printf("&(a, b, c) -> %p\n", &(a, b, c)); // 同样是c的地址
(a, b, c) = 800;
printf("a=%d\n", a); // 1
printf("b=%d\n", b); // 2
printf("c=%d\n", c); // 800