做网站的属于什么行业在线设计平台代理加盟
做网站的属于什么行业,在线设计平台代理加盟,2w网站建设发展环境,红色简约的手机社区类网站html5响应式模板下载今天我们来学习逻辑操作符#xff0c;那么什么是逻辑操作符的陷阱呢#xff1f;在讲解逻辑操作符陷阱之前#xff0c;我们先来回顾什么是逻辑操作符#xff1a;
逻辑运算符的原生语义#xff1a; -操作数只有两种值#xff08;true和false#xff09; -逻辑表达式不用…今天我们来学习逻辑操作符那么什么是逻辑操作符的陷阱呢在讲解逻辑操作符陷阱之前我们先来回顾什么是逻辑操作符
逻辑运算符的原生语义 -操作数只有两种值true和false -逻辑表达式不用完全计算就能确定最终值。 -最终结果只能是true或者false。
好了知道了以上逻辑运算符的语义我们还是直接上代码来分析吧
#include iostream
#include stringusing namespace std;int func(int i)
{cout int func(int i) : i i endl;return i;
}int main()
{if( func(0) func(1) ){cout Result is true! endl;}else{cout Result is false! endl;}cout endl;if( func(0) || func(1) ){cout Result is true! endl;}else{cout Result is false! endl;}return 0;
}分析以上程序知第一个判断语句只打印了int func(int i) : i 0这一个值说明在执行if( func(0) func(1) )这一句时只需要知道func0的结果并不需要计算func1的结果就可以知道最终值。而执行第二个判断语句的时候就需要知道func0与func1的值才能最终确定结果的值。
好了经过以上的程序的分析我们知道了逻辑操作符的一些性质。那么有两个问题 *逻辑操作符能够重载么 *重载逻辑操作符有什么意义
下面还是用一个程序来分析我们的问题
#include iostream
#include stringusing namespace std;class Test
{int mValue;
public:Test(int v){mValue v;}int value()const{return mValue;}
};
bool operator (const Test l ,const Test r)
{return l.value() r.value();
}
bool operator || (const Test l ,const Test r)
{return l.value() || r.value();
}Test func(Test i)
{cout int func(Test i) : i.value i.value() endl;return i;
}int main()
{Test t0(0);Test t1(1);if( func(t0) func(t1) ){cout Result is true! endl;}else{cout Result is false! endl;}cout endl;if( func(1) || func(0) ){cout Result is true! endl;}else{cout Result is false! endl;}return 0;
}运行结果
由打印结果看我们的两个判断语句中的func(t0) func(t1)都执行了这说明重载后的这个操作符与它原生的语义不符原生的语义只需要执行一个条件就行。而这个语句if( func(1) || func(0) )的执行顺序也是先执行func0后执行func1
那么这里呢就出现了一个问题我们重载后的逻辑操作符与它原生的语义不符啊原生的语义是只做一个运算就可以判断最终结果但是重载后的操作符却需要把两个条件都计算一下。而且重载后的||操作符的运算顺序也变了。 这就是我们所要说的逻辑操作符的陷阱
总结 -实际开发过程中最好避免重载逻辑操作符 -重载后的逻辑操作符不满足短路法则 -可以通过重载比较操作符替换逻辑操作符的重载 -通过专用成员函数替换逻辑操作符的重载
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88527.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!