首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Visual C++ > 在比较语句中替换操作数的顺序来避免人为错误
【标  题】:在比较语句中替换操作数的顺序来避免人为错误
【关键字】:操作,错误
【来  源】:网络

在比较语句中替换操作数的顺序来避免人为错误

    用赋值操作符=替代等于操作符==是一个普遍的错误,这个不仅是对初学者而言。问题发生在C++的if赋值语句中。例如:


int user=12;
bool permitted;
boolis_allowed(intuserid);

if(permitted=is_allowed(user)) // intended =
{
  run_script();
}

    首先将函数调用的值赋给if语句,然后再计算值。你可以按照下面的方式改写这个if语句:

permitted=is_allowed(user); file://assign first
If(permitted) // evaluate
{
  run_script();
}

    尽管这种方法敲打键盘的次数较多一点,但是它更具有可读性而且减少了产生认为错误的风险。

    在一些例子中,赋值操作符的使用是无意的。下面的例子实际上是为了检查val是否等于OK而不是给它赋值。

 if(val=OK) // actually meant "val==OK"
{
  file://..do something
}

    尽管在这个例子中编译器会提出警告,但是会忽略了它。最后,这个有效代码使编译器不知道这个程序的意图。

    为了避免印刷错误,很多程序员在等式语句中倒转操作数的顺序。比如:

    if(OK==val) // can't mistake == for =
{
  file://..do something
}

      从语义上来说,val==OK和OK==val是等价的。但是,当你把rvalue放在左边的时候就不能用=代替==因为编译器认为这是一个错误。

   // mistook == for =
// error caught at compile time
if(OK=val)

    使复合型语句形成单独语句的条件语句中建议避免使用赋值语句。当用==语句时你可以倒转操作数的顺序这样rvalue出现在左边,这样可以使编译器发现人为错误。

如何在强制类型中定义NULL:【上一篇】
编写适合自己需要的printf()函数:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • Richview V1.7.11 Full Source
  • JS 设置本窗口大小
  • MiniGUI 2.0.3商业版本安装
  • 3DS MAX教程:Tools菜单了解和应用(2)
  • [敏捷价值观系列3]敏捷和简单(当今世界永恒的话题)
  • IUSR_和IWAM_:计算机名帐户的用户名和密码
  • Flash互动动画剖析:惯性模拟
  • More Effective C++ 条款11:禁止异常信息(exceptions)传递到析构函数外
  • asp.net 里面的xml 部分学习和应用
  • Excel 2000分析与决策
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.