c++中短路求值的妙用

简介: <p>c++中有这样一个特性,即对于与、或运算,如果能够通过第一个表达式计算出整个表达式的真值,那么就不会再去计算第二个表达式。</p><p>比如或运算</p><p>a || b,如果a的值是true,那么整个表达式也肯定是true,程序不会去计算第二个表达式。</p><p>与运算</p><p>a&&b,如果a的值是false,那么整个表达式也肯定是false,程序不会

c++中有这样一个特性,即对于与、或运算,如果能够通过第一个表达式计算出整个表达式的真值,那么就不会再去计算第二个表达式。

比如或运算

a || b,如果a的值是true,那么整个表达式也肯定是true,程序不会去计算第二个表达式。

与运算

a&&b,如果a的值是false,那么整个表达式也肯定是false,程序不会去计算第二个表达式。

于是就出现了一下妙用:

比如,对一个指针接引用,那么必须保证这个指针非空:

传统的做法是

if(ptr)

    ptr->value;

比较简洁的做法:

ptr && ptr->value;

经典的例子:

求n!,要求不能使用任何判断语句,不能使用任何循环语句

 

给你3秒钟哦亲。

 

 

公布答案:

int  func(int n)

{

int t=0;

n && t=func(n-1);

return t*n;

}

 

 

目录
相关文章
|
3月前
|
存储 Serverless C语言
『C/C++』Eg3:多项式求值
『C/C++』Eg3:多项式求值
|
3月前
|
Java Go C++
Golang每日一练(leetDay0092) 丑数 I\II Ugly Number i\ii
Golang每日一练(leetDay0092) 丑数 I\II Ugly Number i\ii
61 0
Golang每日一练(leetDay0092) 丑数 I\II Ugly Number i\ii
|
C语言 C++ 人工智能
标准没有规定C/C++表达式求值顺序
对于表达式,标准并没有规定计算顺序,所以下列代码的运行结果存在多样性: #include stdio.h> int main() {         int m = 1; ...
887 0
|
C++
c/c++ 表达式求值
表达式求值 [问题描述] 一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。
1356 0
|
C++
2014秋C++第8周项目1参考-分段函数求值
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,实践要求见http://blog.csdn.net/sxhelijian/article/details/39493833。 课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。 【项目1:分段函数求值】 编程序,计算下面函数的值并输出(x取整型即可)
1198 0
|
C++ 编译器
2014秋C++第8周项目3参考-多分段函数求值
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,实践要求见http://blog.csdn.net/sxhelijian/article/details/39493833。 课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。  【项目3:多分段函数求值】 从键盘输入x的值(要求为实型),根据下面
1338 0
|
C++
C++第9周项目1分段函数求值
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 【项目1分段函数求值】从键盘输入x的值(整型),根据公式1计算并输出x和y的值。  要求用switch语句构造多分支结构完成求解,利用BB平台上“第9周练习源代码及博文模板.txt”中给出了博文模板发布报告。 解法1:类似例3.9的思路,各分段的标准都为2的倍
1233 0