条件运算符嵌套
2015-08-10 15:52
309 查看
条件运算符(?:)都知道就不细说了,最简单也是最常用的例子:n = (a > b) ? a : b;
在C++ primer plus第六版180页看到了一个例子,如下所示:
const char x[2] [20] = {"Jason","at your services\n"}
const char * y = "Quillstone";
for(int i = 0; i <3; i++)
cout<<((i < 2)? !i ? x[i] : y : x[1]);
打印结果为:
Jason Quillstone at your services
乍一看有点愣住,但仔细看就会发现,原表达式的意思是(i < 2)? (!i ? x[i] : y) : x[1],再对照结果一看,印证了我的想法。在网上找到的例子中还有各种眼花缭乱的嵌套用法,但只要找到每个(?:)运算符应该是怎么配对的,就很容易理解了。
还有一点,该书中说这个技巧完成了一个应被谴责的任务——隐藏代码,书中没有解释,网上也没有相关的资料。那这个条件运算符的代码隐藏体现在什么地方呢?我的理解就是:1、隐藏了一对圆括号。2、将代码缩短了,使得其难于理解。
说了这么多,然而这个条件运算符嵌套并没有什么卵用。最常用的就那种最简单的形式,嵌套的越多代码越难于阅读和理解,这时候使用 if else 语句来表达会更为清晰。
在C++ primer plus第六版180页看到了一个例子,如下所示:
const char x[2] [20] = {"Jason","at your services\n"}
const char * y = "Quillstone";
for(int i = 0; i <3; i++)
cout<<((i < 2)? !i ? x[i] : y : x[1]);
打印结果为:
Jason Quillstone at your services
乍一看有点愣住,但仔细看就会发现,原表达式的意思是(i < 2)? (!i ? x[i] : y) : x[1],再对照结果一看,印证了我的想法。在网上找到的例子中还有各种眼花缭乱的嵌套用法,但只要找到每个(?:)运算符应该是怎么配对的,就很容易理解了。
还有一点,该书中说这个技巧完成了一个应被谴责的任务——隐藏代码,书中没有解释,网上也没有相关的资料。那这个条件运算符的代码隐藏体现在什么地方呢?我的理解就是:1、隐藏了一对圆括号。2、将代码缩短了,使得其难于理解。
说了这么多,然而这个条件运算符嵌套并没有什么卵用。最常用的就那种最简单的形式,嵌套的越多代码越难于阅读和理解,这时候使用 if else 语句来表达会更为清晰。
相关文章推荐
- 合理利用JavaScript的条件运算符
- 封装好的Folyd建图,C++源码
- C/C++常用的调试宏
- VC内存泄露检查工具:VisualLeakDetector
- usb体系结构
- VC结构体实现类似数组的下标操作符功能
- C/C++ 嵌套结构体动态内存管理实现
- C++调用gSoap编写的WEBSERVICE与C#.NET间接口自定义结构体不能重复使用
- 处理VC开发的webservice在C#.NET中中文乱码问题
- gcc使用入门
- C/C++ Linux 程序员必须了解的 10 个工具
- 递归遍历数组
- 用C/C++打印*号图案
- 条件运算符嵌套问题:成绩评级
- C++之四书五经(上)
- 不可表示的数(庞果网)完全解答
- C/C++中生成随机数
- 显式调用构造函数和析构函数
- 九度OJ 题目1000:计算a+b
- c/c++ 回调 c#代码