日期:2011-03-22 13:55:00 来源:本站整理
<b>More Effective C++:不要重载的操作符</b>[VC/C++编程]
本文“<b>More Effective C++:不要重载的操作符</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
与C一样,C++利用布尔表达式简化求值法(short-circuit evaluation).这表示一旦肯定了布尔表达式的真假值,即便还有部份表达式没有被测试,布尔表达式也终止运算.比方:
char *p;
...
if ((p != 0) && (strlen(p) > 10)) ...
这里不用耽忧当p为空时strlen无法精确运行,因为假如p不等于0的测试失利,strlen不会被调用.一样:
int rangeCheck(int index)
{
if ((index < lowerBound) || (index > upperBound)) ...
...
}
假如index小于lowerBound,它不会与upperBound举行对比.
很早从前上述行为特点就被反复灌输给C和C++的程序员,所以他们都知道该特点.并且他们也依靠于简短求值法来写程序.比方在上述第一个代码中,当p为空指针时确保strlen不会被调用是很重要的,因为C++尺度说(正如C尺度所说)用空指针调用strlen,后果不肯定.
C++答应按照用户定义的范例,来定制&&和||操作符.办法是重载函数operator&& 和operator||,你能在全局重载或每个类里重载.但是假如你想利用这种办法,你必须知道你正在极大地改变游戏法则.因为你以函数调用法替换了简短计算法.也就是说假如你重载了操作符&&,关于你来说代码是这样的:
if (expression1 && expression2) ...
关于编译器来说,平等于下面代码之一:
if (expression1.operator&&(expression2)) ...
// when operator&& is a
// member function
if (operator&&(expression1, expression2)) ...
// when operator&& is a
// global function
这仿佛没有什么差别,但是函数调用法与简短求值法是绝对差别的.首先当函数被调用时,需求运算其全部参数,所以调用函数functions operator&& 和 operator||时,两个参数都需求计算,换言之,没有采取简短计算法.第二是C++语言标准没有定义函数参数的计算次序,所以没有办法知道表达式1与表达式2哪一个先计算.完好与具有从左参数到右参数计算次序的简短计算法相反.
以上是“<b>More Effective C++:不要重载的操作符</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论