当前位置:七道奇文章资讯编程技术VC/C++编程
日期: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++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .