C++所有操作符的优先级:
C++操作符的优先级 | |||
操作符及其结合性 | 功能 | 用法 | |
L L L | :: :: :: | 全局作用域 类作用域 名字空间作用域 | ::name class::name namespace::name |
L L L L L | . -> [] () () | 成员选择 成员选择 下标 函数调用 类型构造 | object.member pointer->member variable[expr] name(expr_list) type(expr_list) |
R R R R R | ++ -- typeid typeid 显示强制类型转换 | 后自增操作 后自减操作 类型ID 运行时类型ID 类型转换 | lvalue++ lvalue-- typeid(type) typeid(expr) cast_name<type>(expr) |
R R R R R R R R R R R R R R | sizeof sizeof ++ -- ~ ! - + * & () new delete delete[] | 对象的大小 类型的大小 前自增操作 前自减操作 位求反 逻辑非 一元负号 一元正号 解引用 取地址 类型转换 创建对象 释放对象 释放数组 | sizeofexpr sizeof(type) ++lvalue --lvalue ~expr !expr -expr +expr *expr &expr (type)expr new type delete expr delete []expr |
L L | ->* .* | 指向成员操作的指针 指向成员操作的指针 | ptr->*ptr_to_member obj.*ptr_to_member |
L L L | * / % | 乘法 除法 求模(求余) | expr *expr expr / expr expr % expr |
L L | + - | 加法 减法 | expr +expr expr - expr |
L L | << >> | 位左移 位右移 | expr<< expr expr >> expr |
L L L L | < <= > >= | 小于 小于或等于 大于 大于或等于 | expr< expr expr <= expr expr > expr expr >= expr |
L R | == != | 相等 不等 | Expr ==expr Expr != expr |
R | & | 位与 | Expr& expr |
R | ^ | 位异或 | Expr ^expr |
R | | | 位或 | Expr |expr |
R | && | 逻辑与 | Expr&& expr |
R | || | 逻辑或 | Expr ||expr |
R | ?: | 条件操作 | Expr ?expr : expr |
R R R R R | = *=,/=,%= +=,-= <<=,>>= &=,|=,^= | 赋值操作 符合赋值操作 | Lvalue=expr Lvalue+= expr …… |
R | throw | 抛出异常 | Throwexpr |
L | , | 逗号 | Expr,expr |
记忆方法:(以下是C语言的优先级,与C++差别,记住C语言的,然记住和C++的几个差别就行了....)
全体单目第二; //所有的单目运算符比如++ --+(正) -(负) 指针运算*&
乘除余三,加减四;//这个"余"是指取余运算即%
移位五,关系六;//移位运算符:<<>> ,关系:>< >= <= 等
等于(与)不等排第七; //即==!=
位与异或和位或; //这几个都是位运算:位与(&)异或(^)位或(|)
"三分天下"八九十;
逻辑或跟与; //逻辑运算符:|| 和&&
十二和十一; //注意顺序:优先级(||) 底于优先级(&&)
条件高于赋值, //三目运算符优先级排到 13位只比赋值运算符和","高//需要注意的是赋值运算符很多!
逗号运算级最低!//逗号运算符优先级最低