这篇文章给大家分享的是有关C++中唯一的三元运算符是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
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 : exp3
exp1为真则val = exp2否则val = exp3。
因此不论什么时候都会涉及到一个val后等号的类型转换。
答案其实很简单,0可以视作null,因此默认代码二中cout输出类型是char *,代码三中亦是如此,而代码一中则会出现两种不同的类型,无法顺利进行类型转换。
此外如果是代码二的条件为假的情况,则连endl也不会输出,这个就不知道怎么回事了。
代码四:
cout << (1 > 2 ? 0 : '1') << endl;
会正确的转换成int类型。
结论:
编译器在编译的时候就根据exp2和exp3确定了val的接收类型,再传给cout。
这里一个不规范的0的写法导致了代码二的正常执行。
感谢各位的阅读!关于“C++中唯一的三元运算符是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。