C和C++運算子
運算子優先級

以下是C++程式語言中的所有運算子的優先級和結合性列表。
| 优先级 | 運算子 | 敘述 | 示例 | 重载性 | 結合性 |
| --- | --- | --- | --- | --- | --- |
| 1 | :: | 作用域解析(C++专有) | Class::age = 2; | 否 | 由左至右 |
| 2 | ++ | 后缀递增 | i++ |  | 由左至右 |
| 2 | -- | 后缀递减 | i-- |  | 由左至右 |
| 2 | () | 函数调用或函数调用形式的类型转换 | int x = f(); |  | 由左至右 |
| 2 | [] | 数组访问 | array[4] = 2; |  | 由左至右 |
| 2 | . | 以对象方式访问成员 | obj.age = 34; | 否 | 由左至右 |
| 2 | -> | 以指针方式访问成员 | ptr->age = 34; |  | 由左至右 |
| 2 | dynamic_cast | 运行时检查类型转换(C++专有) | Y& y = dynamic_cast<Y&>(x); | 否 | 由左至右 |
| 2 | static_cast | 未经检查的类型转换(C++专有) | Y& y = static_cast<Y&>(x); | 否 | 由左至右 |
| 2 | reinterpret_cast | 重定义类型转换(C++专有) | int const* p = reinterpret_cast<int const*>(0x1234); | 否 | 由左至右 |
| 2 | const_cast | 更改非常量属性(C++专有) | int* q = const_cast<int*>(p); | 否 | 由左至右 |
| 2 | typeid | 获取类型信息(C++专有) | std::type_info const& t = typeid(x); | 否 | 由左至右 |
| 3 | ++ | 前缀递增 | ++i |  | 由右至左 |
| 3 | -- | 前缀递减 | --i |  | 由右至左 |
| 3 | + | 一元正号 | int i = +1; |  | 由右至左 |
| 3 | - | 一元负号 | int i = -1; |  | 由右至左 |
| 3 | ! not | 逻辑非 !的备用拼写 | if (!done) … |  | 由右至左 |
| 3 | ~ compl | 按位取反 ~的备用拼写 | flag1 = ~flag2; |  | 由右至左 |
| 3 | (type) | 强制类型转换 | int i = (int)floatNum; |  | 由右至左 |
| 3 | * | 取指针指向的值 | int data = *intPtr; |  | 由右至左 |
| 3 | & | 取变量的地址 | int *intPtr = &data; |  | 由右至左 |
| 3 | sizeof | 某某的大小 | size_t s = sizeof(int); | 否 | 由右至左 |
| 3 | new | 动态内存分配(C++专有) | long* pVar = new long; |  | 由右至左 |
| 3 | new[] | 动态数组内存分配(C++专有) | long* array = new long[20]; |  | 由右至左 |
| 3 | delete | 动态内存释放(C++专有) | delete pVar; |  | 由右至左 |
| 3 | delete[] | 动态数组内存释放(C++专有) | delete [] array; |  | 由右至左 |
| 4 | .* | 成员对象选择(C++专有) | obj.*var = 24; | 否 | 由左至右 |
| 4 | ->* | 成员指针选择(C++专有) | ptr->*var = 24; |  | 由左至右 |
| 5 | * | 乘法 | int i = 2 * 4; |  | 由左至右 |
| 5 | / | 除法 | float f = 10.0 / 3.0; |  | 由左至右 |
| 5 | % | 模数（取余数） | int rem = 4 % 3; |  | 由左至右 |
| 6 | + | 加法 | int i = 2 + 3; |  | 由左至右 |
| 6 | - | 減法 | int i = 5 - 1; |  | 由左至右 |
| 7 | << | 位元左移 | int flags = 33 << 1; |  | 由左至右 |
| 7 | >> | 位元右移 | int flags = 33 >> 1; |  | 由左至右 |
| 8 | <=> | 三路比较（C++20） | auto flags = 33 <=> 1; |  | 由左至右 |
| 9 | < | 小于关系 | if (i < 42) … |  | 由左至右 |
| 9 | <= | 小于等于关系 | if (i <= 42) ... |  | 由左至右 |
| 9 | > | 大于关系 | if (i > 42) … |  | 由左至右 |
| 9 | >= | 大于等于关系 | if (i >= 42) ... |  | 由左至右 |
| 10 | == | 等于关系 | if (i == 42) ... |  | 由左至右 |
| 10 | != not_eq | 不等于关系 !=的备用拼写 | if (i != 42) … |  | 由左至右 |
| 11 | & bitand | 位元 AND &的备用拼写 | flag1 = flag2 & 42; |  | 由左至右 |
| 12 | ^ xor | 位元 XOR(独占or) ^的备用拼写 | flag1 = flag2 ^ 42; |  | 由左至右 |
| 13 | | bitor | 位元 OR(包含or) |的备用拼写 | flag1 = flag2 | 42; |  | 由左至右 |
| 14 | && and | 逻辑 AND &&的备用拼写 | if (conditionA && conditionB) … |  | 由左至右 |
| 15 | || or | 逻辑 OR ||的备用拼写 | if (conditionA || conditionB) ... |  |  |
| 16 | c?t:f | 三元条件运算 | int i = a > b ? a : b; | 否 | 由右至左 |
| 17 | = | 直接赋值 |  int a = b; |  | 由右至左 |
| 17 | += | 以和赋值 | a += 3; |  | 由右至左 |
| 17 | -= | 以差赋值 | b -= 4; |  | 由右至左 |
| 17 | *= | 以積赋值 | a *= 5; |  | 由右至左 |
| 17 | /= | 以商赋值 | a /= 2; |  | 由右至左 |
| 17 | %= | 以取余数赋值 | a %= 3; |  | 由右至左 |
| 17 | <<= | 以位元左移赋值 | flags <<= 2; |  | 由右至左 |
| 17 | >>= | 以位元右移赋值 | flags >>= 2; |  | 由右至左 |
| 17 | &= and_eq | 以位元AND赋值 &=的备用拼写 | flags &= new_flags; |  | 由右至左 |
| 17 | ^= xor_eq | 以位元XOR赋值 ^=的备用拼写 | flags ^= new_flags; |  | 由右至左 |
| 17 | |= or_eq | 以位元OR赋值 |=的备用拼写 | flags |= new_flags; |  | 由右至左 |
| 18 | throw | 抛出异常 | throw EClass("Message"); | 否 |  |
| 19 | , | 逗號運算子 | for (i = 0, j = 0; i < 10; i++, j++) … |  | 由左至右 |