C ++的运算符优先级

来源:互联网 发布:淘宝网 卖t恤是真吗 编辑:程序博客网 时间:2024/04/28 23:48

The following table lists the precedence and associativity of C++ operators. Operators are listed top to bottom, in descending precedence.

PrecedenceOperatorDescriptionAssociativity1::Scope resolutionLeft-to-right2++ --Suffix/postfix increment and decrement()Function call[]Array subscripting.Element selection by reference->Element selection through pointertypeid()Run-time type information (seetypeid)const_castType cast (see const_cast)dynamic_castType cast (see dynamic_cast)reinterpret_castType cast (seereinterpret_cast)static_castType cast (see static_cast)3++ --Prefix increment and decrementRight-to-left+ -Unary plus and minus! ~Logical NOT and bitwise NOT(type)Type cast*Indirection (dereference)&Address-ofsizeofSize-ofnewnew[]Dynamic memory allocationdeletedelete[]Dynamic memory deallocation4.* ->*Pointer to memberLeft-to-right5* / %Multiplication, division, and remainder/modulus[1]6+ -Addition and subtraction7<< >>Bitwise left shift and right shift8< <=For relational operators < and ≤ respectively> >=For relational operators > and ≥ respectively9== !=For relational = and ≠ respectively10&Bitwise AND11^Bitwise XOR (exclusive or)12|Bitwise OR (inclusive or)13&&Logical AND14||Logical OR15?:Ternary conditionalRight-to-Left16=Direct assignment (provided by default for C++ classes)+= -=Assignment by sum and difference*= /= %=Assignment by product, quotient, and remainder<<= >>=Assignment by bitwise left shift and right shift&= ^= |=Assignment by bitwise AND, XOR, and OR17throwThrow operator (exceptions throwing)18,CommaLeft-to-right

When parsing an expression, an operator which is listed on some row will be bound tighter (as if by parentheses) to its arguments than any operator that is listed on a row further below it. For example, the expression std::cout<<a&b is parsed as (std::cout<<a)&b and not std::cout<<(a&b).

Operators that are in the same cell (there may be several rows of operators listed in a cell) are evaluated with the same precedence, in the given direction. For example, the expressions *p++ and a=b=c are parsed as *(p++) and a=(b=c), and not as (*p)++ or (a=b)=c because of right-to-left associativity.

An operator's precedence is unaffected by overloading.

  1. ↑ ISO/IEC 14882:2003 : Programming languages -- C++. "the binary % operator yields the remainder from the division of the first expression by the second. .... If both operands are nonnegative then the remainder is nonnegative; if not, the sign of the remainder is implementation-defined".
原创粉丝点击