brent's hut

C++ 运算符优先级列表

http://www.cppreference.com/operator_precedence.html
Precedence Operator Description Example Associativity
1 ()
[]
->
.
::
++
--
Grouping operator
Array access
Member access from a pointer
Member access from an object
Scoping operator
Post-increment
Post-decrement
(a + b) / 4;
array[4] = 2;
ptr->age = 34;
obj.age = 34;
Class::age = 2;
for( i = 0; i < 10; i++ ) ...
for( i = 10; i > 0; i-- ) ...
left to right
2 !
~
++
--
-
+
*
&
(type)
sizeof
Logical negation
Bitwise complement
Pre-increment
Pre-decrement
Unary minus
Unary plus
Dereference
Address of
Cast to a given type
Return size in bytes
if( !done ) ...
flags = ~flags;
for( i = 0; i < 10; ++i ) ...
for( i = 10; i > 0; --i ) ...
int i = -1;
int i = +1;
data = *ptr;
address = &obj;
int i = (int) floatNum;
int size = sizeof(floatNum);
right to left
3 ->*
.*
Member pointer selector
Member pointer selector
ptr->*var = 24;
obj.*var = 24;
left to right
4 *
/
%
Multiplication
Division
Modulus
int i = 2 * 4;
float f = 10 / 3;
int rem = 4 % 3;
left to right
5 +
-
Addition
Subtraction
int i = 2 + 3;
int i = 5 - 1;
left to right
6 <<
>>
Bitwise shift left
Bitwise shift right
int flags = 33 << 1;
int flags = 33 >> 1;
left to right
7 <
<=
>
>=
Comparison less-than
Comparison less-than-or-equal-to
Comparison greater-than
Comparison geater-than-or-equal-to
if( i < 42 ) ...
if( i <= 42 ) ...
if( i > 42 ) ...
if( i >= 42 ) ...
left to right
8 ==
!=
Comparison equal-to
Comparison not-equal-to
if( i == 42 ) ...
if( i != 42 ) ...
left to right
9 & Bitwise AND flags = flags & 42; left to right
10 ^ Bitwise exclusive OR flags = flags ^ 42; left to right
11 | Bitwise inclusive (normal) OR flags = flags | 42; left to right
12 && Logical AND if( conditionA && conditionB ) ... left to right
13 || Logical OR if( conditionA || conditionB ) ... left to right
14 ? : Ternary conditional (if-then-else) int i = (a > b) ? a : b; right to left
15 =
+=
-=
*=
/=
%=
&=
^=
|=
<<=
>>=
Assignment operator
Increment and assign
Decrement and assign
Multiply and assign
Divide and assign
Modulo and assign
Bitwise AND and assign
Bitwise exclusive OR and assign
Bitwise inclusive (normal) OR and assign
Bitwise shift left and assign
Bitwise shift right and assign
int a = b;
a += 3;
b -= 4;
a *= 5;
a /= 2;
a %= 3;
flags &= new_flags;
flags ^= new_flags;
flags |= new_flags;
flags <<= 2;
flags >>= 2;
right to left
16 , Sequential evaluation operator for( i = 0, j = 0; i < 10; i++, j++ ) ... left to right

posted on 2006-06-08 09:33 brent 阅读(186215) 评论(18)  编辑 收藏 引用 所属分类: C++

评论

# re: C++ 运算符优先级列表 2009-04-17 20:16 创意产品网

收藏了,需要时可以来查  回复  更多评论   

# re: C++ 运算符优先级列表 2009-10-14 19:50 Xiaodu

不错,很有用……  回复  更多评论   

# re: C++ 运算符优先级列表 2009-12-25 10:31 rock

::域运算符的优先级应该是最高的吧  回复  更多评论   

# re: C++ 运算符优先级列表 2010-01-09 21:20 xgenvn

@rock
就是,都在precedence1,一样的优先级  回复  更多评论   

# re: C++ 运算符优先级列表 2010-05-09 11:42 gkhdgfg

真是不错,省得翻书了。  回复  更多评论   

# re: C++ 运算符优先级列表 2010-10-28 09:47 zhuang563

这种情况如何判断?a是0、1、2时,都要判断b吗?还是只有a=1或2时,才判断b?

if(a==0 || a==1 && b==0 || a==2 && b==1)  回复  更多评论   

# re: C++ 运算符优先级列表 2010-10-29 11:17 brent

@zhuang563
if(a==0 || a==1 && b==0 || a==2 && b==1)
相当于
if(a==0 || (a==1 && b==0) || (a==2 && b==1) )
对于||来说, 只要遇到一个表达式是true, 后面的表达式都不会再判断, ||范围的表达式为true。
而对于&&来说, 只要遇到一个表达式是false, 后面的表达式都不会再判断, &&范围的整个表达式为false。
你可以写一些代码自己调试看看就知道了。  回复  更多评论   

# re: C++ 运算符优先级列表 2011-06-16 19:05 林缘雨梦

我编了个口诀,帮忙记忆
阔框点箭域先锋 ① () [] . -> ::
塞外干旱烦政府 ②sizeof ! ~ + -
家家户户限制米 ++ -- (type型) &(取址) *
救灾捐米一点米 ③->* .*
时余曾促物价减 ④% * / ⑤+ -
左邻右舍来相告 ⑥<< >>
老大小凳换大凳 ⑦> < <= >=
把事说明等不等 ⑧== !=
久雨适宜事宜否 ⑨&⑩^⑾|
十二雨下十三过 ⑿&&⒀||
三梦睡醒灯都灭 ⒁:?(三目运算) ⒂= +=...⒃,(逗号)
  回复  更多评论   

# re: C++ 运算符优先级列表 2011-09-09 12:31 幻の上帝

这张表还是有问题的。
严格来说::不算operator。::和析构函数的~是同一个性质的东西,是punctuator。
讨论优先级的话,::确实在最前。它参与组成了primary-expression。而操作符至少组成postfix-expression。  回复  更多评论   

# re: C++ 运算符优先级列表 2012-03-18 07:45 Carl

你太有才了,Very Smart  回复  更多评论   

# re: C++ 运算符优先级列表 2012-03-18 08:49 Carl

请问各位大侠,# 与##是什么运算符,有什么作用?  回复  更多评论   

# re: C++ 运算符优先级列表 2012-04-01 16:02 MassachusettsIT

很好,很强大!!!  回复  更多评论   

# re: C++ 运算符优先级列表 2012-04-11 16:46 沉默的羔羊

谢谢分享,收藏了  回复  更多评论   

# re: C++ 运算符优先级列表 2012-04-17 10:41 呵呵

多谢分享  回复  更多评论   

# re: C++ 运算符优先级列表 2012-05-29 01:24 lalallalaGERUSA

hi ^^ LALALLAALLALALAL  回复  更多评论   

# re: C++ 运算符优先级列表 2012-06-02 19:31 carinabarra@libero.it

Ve puzza la chiappa  回复  更多评论   

# re: C++ 运算符优先级列表 2012-08-02 07:53 +++++++++++

+++++++++++  回复  更多评论   

# re: C++ 运算符优先级列表 2012-11-10 10:36 ererer

&GetDocument()->m_sampleSet;

请问上面都语句对GetDocument()是先取地址呢,还是先进行箭头操作?  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理