C++运算符优先级
2015-08-28 20:32
651 查看
C++语言操作符优先级
运算符优先级记忆方法:
![](http://s8.sinaimg.cn/mw690/4758a28bgd6c4df602a77&690)
说明:
C++输入输出是通过iostream库来实现的。在iostream库中,输入输出操作分别有istream(输入流)和ostream(输出流)两个类提供,而iostream则是这两个类的派生类。它允许进行双向的I/O操作。istream的输入操作可以认为是一个数据抽取的过程,通过右移操作符“>>”从输入流抽取数据;而ostream的输出操作则可以认为是一个数据插入的过程,通过左移操作符“<<”将数据插入到输出流中。
用法:cin>>a; 可将“>>”称为析取操作符 可重载
cout<<a; 可将“<<”称为插入操作符 可重载
附二
优先级 | 运算符 | 含 义 | 示 例 | 结合方向 | 要求运算 对象的个数 | 可重载性 |
1 | :: | 全局解析 | ::x | 自右至左 | 一元操作符 | 不可重载 |
:: | 类域解析 | X::x | 自左至右 | 二元操作符 | 不可重载 | |
2 | . | 直接成员选择运算符 | s.len | 自左至右 | 二元操作符 | 不可重载 |
( ) | 圆括号 | 可重载 | ||||
( ) | 函数调用 | rand( ) | ||||
( ) | 类型构造 | int( ch) | ||||
[ ] | 下标运算符 | a[i] | 二元操作符 | |||
-> | 间接成员选择运算符 | p->len | 二元操作符 | |||
++ | 后增 | n++ | 自右至左 | 一元操作符 | ||
- - | 后减 | n- - | 一元操作符 | |||
3 | ! | 逻辑非运算符 | !p | 自右至左 | 一元操作符 | 可重载 |
~ | 按位取反运算符 | ~s | ||||
++ | 前增运算符 | ++n | ||||
- - | 前减运算符 | - -n | ||||
- | 负号运算符 | -n | ||||
* | 反引用运算符 | *p | ||||
& | 求地址运算符 | &x | ||||
new | 空间分配 | new int(9) | ||||
delete | 空间释放 | delete p | ||||
(类型) | 类型转换运算符 | (int)ch | 二元操作符 | |||
sizeof | 长度运算符 | sizeof(a) | 一元操作符 | 不可重载 | ||
4 | * | 乘法运算符 | m*n | 自左至右 | 二元操作符 | 可重载 |
/ | 除法运算符 | m/n | ||||
% | 求余运算符 | m%n | ||||
5 | + | 加法运算符 | m+n | 自左至右 | 二元操作符 | 可重载 |
- | 减法运算符 | m-n | ||||
6 | << | 左移运算符 | m<<n | 自左至右 | 二元操作符 | 可重载 |
>> | 右移运算符 | m>>n | ||||
7 | < | 小于 | x<y | 自左至右 | 二元操作符 | 可重载 |
<= | 小于等于 | x<=y | ||||
> | 大于 | x>y | ||||
>= | 大于等于 | x>=y | ||||
8 | == | 等于运算符 | x==y | 自左至右 | 二元操作符 | 可重载 |
!= | 不等于运算符 | x!=y | ||||
9 | & | 按位与运算符 | s&t | 自左至右 | 二元操作符 | 可重载 |
10 | ^ | 按位异或运算符 | s^t | 自左至右 | 二元操作符 | 可重载 |
11 | | | 按位或运算符 | s|t | 自左至右 | 二元操作符 | 可重载 |
12 | && | 逻辑与运算符 | u&&v | 自左至右 | 二元操作符 | 可重载 |
13 | || | 逻辑或运算符 | u||v | 自左至右 | 二元操作符 | 可重载 |
14 | ? : | 条件运算符 | u? x : y | 自左至右 | 三元操作符 | 不可重载 |
15 | = | 赋值运算符 | n=22 | 自右至左 | 二元操作符 | 可重载 |
+= | 先加,再赋值 | n+=8 | ||||
-= | 先减,再赋值 | n-=4 | ||||
*= | 先乘,再赋值 | n*= -1 | ||||
/= | 先除,再赋值 | n/10 | ||||
%= | 先求余,再赋值 | n%=10 | ||||
>>= | 先左移位,再赋值 | n>>=1 | ||||
<<= | 先右移位,再赋值 | N<<=1 | ||||
&= | 先按位与,再赋值 | s&=mask | ||||
^= | 先按位异或,再赋值 | s^=mask | ||||
|= | 先按位或,再赋值 | s|=mask | ||||
16 | , | 逗号运算符 | ++m,- -n | 自左至右 | 可重载 |
说明:
C++输入输出是通过iostream库来实现的。在iostream库中,输入输出操作分别有istream(输入流)和ostream(输出流)两个类提供,而iostream则是这两个类的派生类。它允许进行双向的I/O操作。istream的输入操作可以认为是一个数据抽取的过程,通过右移操作符“>>”从输入流抽取数据;而ostream的输出操作则可以认为是一个数据插入的过程,通过左移操作符“<<”将数据插入到输出流中。
用法:cin>>a; 可将“>>”称为析取操作符 可重载
cout<<a; 可将“<<”称为插入操作符 可重载
附二
操作符及其结合性 | 功能 | 用法 | |
L | :: | global scope(全局作用域) | :: name |
L | :: | class scope(类作用域) | class :: name |
L | :: | namespace scope(名字空间作用域) | namespace :: name |
L | . | member selectors(成员选择) | object . member |
L | -> | member selectors(成员选择) | pointer -> member |
L | [] | subscript(下标) | variable[expr] |
L | () | function call(函数调用) | name(expr_list) |
L | () | type construction(类型构造) | type(expr_list) |
R | ++ | postfix increment(后自增操作) | lvalue++ |
R | -- | postfix decrement(后自减操作) | lvalue-- |
R | typeid | type ID(类型ID) | typeid (type) |
R | typeid | run-time type ID(运行时类型 ID) | typeid (expr) |
R | explicit cast (显式强制类型转换) | type conversion(类型转换) | cast_name<type>(expr) |
R | sizeof | size of object(对象的大小) | sizeof expr |
R | sizeof | size of type(类型的大小) | sizeof(type) |
R | ++ | prefix increment(前自增操作) | ++lvalue |
R | -- | prefix decrement(前自减操作) | --lvalue |
R | ~ | bitwise NOT(位求反) | ~expr |
R | ! | logical NOT(逻辑非) | !expr |
R | - | unary minus(一元负号) | =-expr |
R | + | unary plus(一元正号) | =+expr |
R | * | dereference(解引用) | *expr |
R | & | address-of(取地址) | &expr |
R | () | type conversion(类型转换) | (type) expr |
R | new | allocate object(创建对象) | new type |
R | delete | deallocate object(释放对象) | delete expr |
R | delete[] | deallocate array(释放数组) | delete[] expr |
L | ->* | ptr to member select(指向成员操作的指针) | ptr ->*ptr_to_member |
L | .* | ptr to member select(指向成员操作的指针) | obj .*ptr_to_member |
L | * | multiply(乘法) | expr * expr |
L | / | divide(除法) | expr/ expr |
L | % | modulo (remainder)(求模(求余)) | expr % expr |
L | + | add(加法) | expr +expr |
L | - | subtract(减法) | expr - expr |
L | << | bitwise shift left(位左移) | expr << expr |
L | >> | bitwise shift right(位右移) | expr >> expr |
L | < | less than(小于) | expr < expr |
L | <= | less than or equal(小于或等于) | expr <= expr |
L | > | greater than(大于) | expr > expr |
L | >= | greater than or equal(大于或等于) | expr >= expr |
L | == | equality(相等) | expr == expr |
L | != | inequality(不等) | expr != expr |
L | & | bitwise AND(位与) | expr & expr |
L | ^ | bitwise XOR() | expr ^ expr |
L | | | bitwise OR(位异或) | expr | expr |
L | && | logical AND(逻辑与) | expr && expr |
L | || | logical OR(逻辑或) | expr || expr |
R | ?: | conditional(条件操作) | expr ? expr : expr |
R | = | assignment(赋值操作) | lvalue = expr |
R | *=, /=, %=, | compound assign(复合赋值操作) | lvalue += expr, etc. |
R | +=,-=, | ||
R | <<=, >>=, | ||
R | &=,|=, ^= | ||
R | throw | throw exception(抛出异常) throw expr | |
L | , | comma(逗号) | expr, expr |
相关文章推荐
- 有关C语言程序内存问题的5条规则
- c++最基础的20条规则
- C++宏定义
- c与c++的区别
- C++之 typedef
- 栈的链式实现(C语言描述)
- 【C语言连载六】--------变量、修饰词、结构体、枚举、typedef
- 【C语言连载五】--------指针
- C++静态成员函数小结(转)
- Prototype 模式示例代码 (C++)
- C语言中的内部名和外部名
- LeetCode-Single Number-解题报告
- 转:C++字符串系列
- C++进阶学习指引
- 学习心得:链表的操作(C语言实现)
- 作业《IOS_C语言》进制,C数据类型,常量类型,运算符,表达式,格式化输入输出
- 通俗易懂学C语言-02-C语言程序长啥样以及运行流程
- 关于C++中的友元函数的总结
- c++设计模式15 --组合模式
- C++ Builder 将数据库数据导出到Excel中总结2