C++ primer中4.33练习逗号运算符的理解
2016-10-15 11:45
323 查看
今天在做primer的练习,发现一个问题,书上4.33练习的题目如下:
说明下面这个表达式的意义:
<pre name="code" class="cpp">someValue?++x,++y:--x,--y;
在CLion下编辑实验如下:
/**
* test 4.33
* 逗号运算符的效果
*/
#include <iostream>
using namespace std;
int main()
{
int x = 10;
int y = 20;
//part 1
bool someValue = true;
someValue?++x,++y:--x,--y;
cout << x << " " << y << " " << someValue << endl;
//part 2
someValue = false; x = 10;y = 20;
someValue?++x,++y:--x,--y;
cout << x << " " << y << " " << someValue << endl;
return 0;
}
最后的运行结果如下:
11 20 1
9 19 0
所以,意味着,someValue为true时,并不是简单的运行了++x,++y,那究竟是如何运算的呢?
回过头看编译器,其实clion已经有了提示:
这里因为someValue的值是确定的,所以clion提示warning,并且以灰色来标注肯定不会运行的部分,与此对应,someValue为false时:
可以看到无论someValue的值怎么变,--y是肯定运算的,查阅书籍后,原因如下:
逗号运算符的优先级是最低的,主要作用是将几个算式并列并返回最右边的算式的结果,在刚才的表达式中,在编译器的眼中,真实的运算顺序为
(someValue?++x,++y:--x),--y;故,--y被认为是一个独立的表达式,要改变这一情况,在表达式附近加上括号区分即可。
有关逗号运算符的更多信息与实验,可以看这篇博客:
http://www.cnblogs.com/hnrainll/archive/2011/08/03/2126660.html
说明下面这个表达式的意义:
<pre name="code" class="cpp">someValue?++x,++y:--x,--y;
在CLion下编辑实验如下:
/**
* test 4.33
* 逗号运算符的效果
*/
#include <iostream>
using namespace std;
int main()
{
int x = 10;
int y = 20;
//part 1
bool someValue = true;
someValue?++x,++y:--x,--y;
cout << x << " " << y << " " << someValue << endl;
//part 2
someValue = false; x = 10;y = 20;
someValue?++x,++y:--x,--y;
cout << x << " " << y << " " << someValue << endl;
return 0;
}
最后的运行结果如下:
11 20 1
9 19 0
所以,意味着,someValue为true时,并不是简单的运行了++x,++y,那究竟是如何运算的呢?
回过头看编译器,其实clion已经有了提示:
这里因为someValue的值是确定的,所以clion提示warning,并且以灰色来标注肯定不会运行的部分,与此对应,someValue为false时:
可以看到无论someValue的值怎么变,--y是肯定运算的,查阅书籍后,原因如下:
逗号运算符的优先级是最低的,主要作用是将几个算式并列并返回最右边的算式的结果,在刚才的表达式中,在编译器的眼中,真实的运算顺序为
(someValue?++x,++y:--x),--y;故,--y被认为是一个独立的表达式,要改变这一情况,在表达式附近加上括号区分即可。
有关逗号运算符的更多信息与实验,可以看这篇博客:
http://www.cnblogs.com/hnrainll/archive/2011/08/03/2126660.html
相关文章推荐
- 【C++ primer在练习中体悟】 C++中二元运算符重载需要使用friend的原因
- 《C++ primer》英文第五版阅读笔记(十九)——位运算符,sizeof运算符和逗号运算符
- 帮我解释一下逗号运算符和逗号表达式的理解
- 变量运算符练习Test11
- Solution for Exercise 4.33 of C++ Primer 5th Edition.
- 我读C++ Primer - 运算符与表达式
- c++ primer 11.2.2练习11.9
- 关于c中逗号运算符的学习
- 三目运算符的理解
- 理解运算符&&的三个不同层次
- &&运算符的三个层次理解
- c++ primer 1.4.2节练习
- C++ Primer(第五版)练习3.25
- C++ primer 第五版 中文版 练习 9.51 个人code
- C++ primer 第五版 中文版 练习 10.13 个人code
- C++ primer-练习3.27和3.28
- C Primer Plus 第5章 运算符、表达式和语句 编程练习
- C++ primer 第五版 中文版 练习 10.25个人code
- 运算符的理解
- C++ Primer 第五版 练习 3.21,3.24