您的位置:首页 > 编程语言 > C语言/C++

C++运算符优先级

2013-07-11 00:48 267 查看
注:以下所有内容全部翻译至C++ Primer Plus Sixth Edition
说明:C++运算符分为18个优先级组,第一组优先级最高,第二组次之,以此类推。如果两个运算符被用于操作同一个操作数,并且两个运算符优先级相同,则根据C++使用的结合性来决定哪个运算符结合的更为紧密。
说明:同组内,优先级一样,排名不分先后

优先级组运算符结合性含义例子
第1组:: 作用域解析运算符Class::function();
第2组( 表达式 ) 分组(3 + 6.5 * x);
()从左到右函数调用function(x, y);
()值构造,即type(expr)string("Hughen");
[ ]数组下标array[1] * 5;
->间接成员运算符ptr->num[1];
.直接成员运算符my.name;
const_cast专用类型转换(去掉类型中的常量符const)pb = const_cast<ptr*>(pa);
dynamic_cast专用类型转换(完成类层次结构中的提升)void* pb = dynamic_cast<Class*>(pa)
reinterpret_cast专用类型转换(转换成其它类型的指针)B* pb = reinterpret_cast<A*>(pa);
static_cast专用类型转换int a = static_cast<double>(12.77);
++自增加1,后缀i++ * 4;
--自减减1,后缀i-- * 4;
第3组!从右到左逻辑非!open();
~位非&~12;
+一元加号(正号)+a;
-一元减号(负号)-a + 7 / b;
++自增加1,前缀++i * 4;
--自减减1,前缀--i * 4;
&取地址ptr = &a;
*解除引用(间接值)i = *ptr;
()类型转换,即(type)expr(int)12.77;
sizeof以字节为单位,求长度sizeof(int);
new动态分配内存int* p = new int;
new [ ]动态分配数组int* p = new int[5];
delete动态释放内存delete p;
delete [ ]动态释放数组delete [ ] p;
第4组.*从左到右成员解除引用my.*ptr + 5;
->*间接成员解除引用pa->*ptr + 5;
第5组*从左到右i * j + 9
/i / j + 9
%模(余数)int a = 7 % 4
第6组+从左到右int x = 12 + a;
-int x = 12 - a;
第7组<<从左到右左移int a = 5 << 2;
>>右移int a = 5 >> 2;
第8组<从左到右小于bool sign = x < MAX;
<=小于或等于bool sign = x <= MAX;
>=大于或等于bool sign = x >= MAX;
>大于bool sign = x > MAX;
第9组==从左到右等于bool sign = x == MAX;
!=不等于bool sign = x != MAX;
第10组&从左到右按位与(按位AND)int a = 5 & 2;
第11组^从左到右按位异或(按位XOF)int a = 5 ^ 2;
第12组|从左到右按位或(按位OR)int a = 5 | 2;
第13组&&从左到右逻辑ANDbool sign = x && x != 0;
第14组||从左到右逻辑ORbool sign = x || x != 0;
第15组? :从右到左条件(三元条件运算符)int i = (x < MAX) ? x : MAX;
第16组=从右到左简单赋值int i = 0;
*=乘并赋值x *= 5;
/=除并赋值x /= 5;
%=求模并赋值x %= 5;
+=加并赋值x += 5;
-=减并赋值x -= 5;
&=按位AND并赋值x &= 5;
^=按位XOR并赋值x ^= 5;
|=按位OR并赋值x |= 5;
<<=左移并赋值x <<= 2;
>>=右移并赋值x >>= 2;
第17组throw从左到右抛出异常throw 404;
第18组,从左到右将两个表达式合并成一个int x = 0, y = 5 * MAX;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 运算符优先级