Programming 版 (精华区)

发信人: netiscpu (说不如做), 信区: Programming
标  题: C++ 编程准则与忠告 之 Expressions
发信站: 紫 丁 香 (Sun Jul 26 11:24:17 1998), 转信


15 Expressions

Back to index 

Rec. 56 Use parentheses to clarify the order of evaluation for
operators in expressions. 


There are a number of common pitfalls having to do with the order of
evaluation for operators in an expression. Binary operators in C++
have associativity (either leftwards or rightwards) and precedence. If
an operator has leftwards associativity and occurs on both sides of a
variable in an expression, then the variable belongs to the same part
of the expression as the operator on its left side. 

In doubtful cases, parentheses always are to be used to clarify the
order of evaluation. 

Another common mistake is to confuse the assignment operator and the
equality operator. Since the assignment operator returns a value, it
is entirely permitted to have an assignment statement instead of a
comparison expression. This, however, most often leads straight to an
error. 

C++ allows the overloading of operators, something which can easily
become confusing. For example, the operators << (shift left) and
>>(shift right) are often used for input and output. Since these were
originally bit operations, it is necessary that they have higher
priority than relational operators. This means that parentheses must
be used when outputting the values of logical expressions. 



Example 62 Problem with the order of evaluation 

  // Interpreted as ( a&ltb )&ltc, not ( a&ltb ) && ( b&ltac )

  if ( a&ltb&ltc )

  {

    // ...

  }

        

  // Interpreted as a & ( b&lt8 ), not ( a & b )&lt8

  if ( a & b&lt8 )

  {

    // ...

  }

        



Example 63 When parentheses are recommended 

  int i = a >= b && c&ltd && e + f < = g + h;           // No!

  int j = ( a >= b ) && ( c&ltd ) && (( e + f ) < = ( g + h ));   // Better

        


--

                              Enjoy Linux!
                          -----It's FREE!-----

※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.008毫秒