时间:2021-05-20
C++有3种运算符:算数运算符、关系运算符和逻辑运算符。
运算符在计算机中的执行顺序
运算符用来构成表达式并指示计算机执行计算,其基本特性就是优先级和结合律。在没有使用小括号确定一个复合表达式中个运算符的计算顺序的情况下,编译器将使用它们的优先级和结合律老确定计算顺序,优先级越高的运算符越先运算。
如果代码行中的运算符比较多,用括号确定表达式中每一个子表达式的计算顺序,避免使用默认优先级。
C++中唯一的三元运算符
条件运算符“?:“,其语法为:
// 条件表达式 ? 表达式1 : 表达式2;bool b_show = true;int state = b_show ? 0 : 1;// state = 0;语义:如果“条件表达式”为true,则整个表达式的值就是表达式1,忽略表达式2;如果“条件表达式”为false,则整个表达式的值就是表达式2,忽略表达式1。等价于以下if/else语句
Result result;if (条件表达式){ result = 表达式1;}else{ result = 表达式2;}同学群里面讨论的,感觉很有意思,就记录下来了。
问题如下:
代码一
cout << (1 > 2 ? 1 : "1") << endl;代码二
cout << (1 > 2 ? 0 : "1") << endl;代码三
cout << (1 > 2 ? "hello" : "hi") << endl;运行结果是代码一出错error C2446: “:”: 没有从“const char *”到“int”的转换,代码二和三没有任何问题。
这里再回顾下三元运算符的用法。
val = exp1 ? exp2 : exp3exp1为真则val = exp2否则val = exp3。
因此不论什么时候都会涉及到一个val后等号的类型转换。
答案其实很简单,0可以视作null,因此默认代码二中cout输出类型是char *,代码三中亦是如此,而代码一中则会出现两种不同的类型,无法顺利进行类型转换。
此外如果是代码二的条件为假的情况,则连endl也不会输出,这个就不知道怎么回事了。
代码四:
cout << (1 > 2 ? 0 : '1') << endl;会正确的转换成int类型。
结论:
编译器在编译的时候就根据exp2和exp3确定了val的接收类型,再传给cout。
这里一个不规范的0的写法导致了代码二的正常执行。
到此这篇关于C++中唯一三元运算符?:的文章就介绍到这了,更多相关C++三元运算符?:内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Python三元运算实现方法。分享给大家供大家参考。具体分析如下:Python中没有像C++和Java等语言中的三元运算符,但是可以用ifelse
C#条件运算符是指什么呢?让我们首先从概念上了解C#条件运算符: ?:运算符称为条件运算符。有时,它也称为三元运算符。 conditional-expr
JavaScript脚本语言描述了一组用于操作数据值的运算符,包括一元运算符,布尔运算符,算术运算符,关系运算符,三元运算符,位运算符和赋值运算符。表达式是Ja
这是今天在温习lambda表达式的时候想到的问题,众所周知C系列语言中的三元运算符(?:)是一个非常好用的语句,关于C中的三元运算符表达式1?表达式2:表达式3
C++中运算符&和&&、|和||的详解及区别简介:&&是逻辑与运算符,||是逻辑或运算符,都是逻辑运算符,两边只能是bool类型&与|既可以进行逻辑运算,又可以