运算符优先级
下表按照优先级顺序列出了C++的全部操作符。该表以两种颜色分割成不同的段,每段内各个操作符的优先级相同,且都高于后面各段中的操作符。
结合律 | 运算符 | 功能 | 用法 |
说明 |
|
L | :: | 全局作用域 | ::name | ||
L | :: | 类作用域 | class::name | ||
L | :: | 命名空间作用域 | namespace::name | ||
L | . | 成员选择 | object.member | ||
L | -> | 成员选择 | pointer->member | ||
L | [] | 下标 | variable[expr] | ||
L | () | 函数调用 | name(expr_list) | ||
L | () | 类型构造 | type(expr_list) | ||
R | ++ | 后自增操作 | lvalue++ | ||
R | -- | 后自减操作 | lvalue-- | ||
R | typeid | 类型ID | typeid(type) | ||
R | typeid | 运行时类型ID | typeid(expr) | ||
R | explicit cast | 类型转换 | cast_name<type>(expr) | ||
R | sizeof | 对象的大小 | sizeof expr | ||
R | sizeof | 类型的大小 | sizeof(type) | ||
R | sizeof... | 参数包的大小 | sizeof...(name) | ||
R | ++ | 前自增操作 | ++lvalue | ||
R | -- | 前自减操作 | --lvalue | ||
R | ~ | 位求反 | ~expr | ||
R | ! | 逻辑非 | !expr | ||
R | - | 一元负号 | -expr | ||
R | + | 一元正号 | +expr | ||
R | * | 解引用 | *expr | ||
R | & | 取地址 | &expr | ||
R | () | 类型转换 | (type)expr | ||
R | new | 创建对象 | new type | ||
R | delete | 释放对象 | delete type | ||
R | delete[] | 释放数组 | delete[]expr | ||
R | noexcept | 能否抛出异常 | noexcept(expr) | ||
L | ->* | 指向成员操作的指针 | ptr->*ptr_to_member | ||
L | .* | 指向成员操作的指针 | obj.*ptr_to_member | ||
L | * | 乘法 | expr * expr | ||
L | / | 除法 | expr / expr | ||
L | % | 求模(求余) | expr % expr | ||
L | + | 加法 | expr + expr | ||
L | - | 减法 | expr - expr | ||
L | << | 向左移位 | expr << expr | ||
L | >> | 向右移位 | expr >> expr | ||
L | < | 小于 | expr < expr | ||
L | <= | 小于等于 | expr <= expr | ||
L | > | 大于 | expr > expr | ||
L | >= | 大于等于 | expr >= expr | ||
L | == | 相等 | expr == expr | ||
L | != | 不相等 | expr != expr | ||
L | & | 位与 | expr & expr | ||
L | ^ | 位异或 | expr ^ expr | ||
L | | | 位或 | expr | expr | ||
L | && | 逻辑与 | expr && expr | ||
L | || | 逻辑或 | expr || expr | ||
R | ? : | 条件 | expr ? expr : expr | ||
R | = | 赋值 | lvalue = expr | ||
R | *=, /=, %= | 复合赋值 | lvalue += expr end so on | ||
R | +=, -= | ||||
R | <<=, >>= | ||||
R | &=, |=, ^= | ||||
R | throw | 抛出异常 | throw expr | ||
L | , | 逗号 | expr, expr |
cast-name是static_cast、dynamic_cast、const_cast和reinterpret_cast中的一种。dynamic_cast支持运行时类型识别。