C++运算符分类

C++运算符可分为以下几类:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 其他运算符

算术运算符

包括加减乘除等基本运算:

int a = 10 + 5;  // 加
int b = 10 - 5;  // 减
int c = 10 * 5;  // 乘
int d = 10 / 5;  // 除
int e = 10 % 3;  // 取模

自增自减运算符:

int x = 5;
x++;  // 后置自增
++x;  // 前置自增
x--;  // 后置自减
--x;  // 前置自减

关系运算符

用于比较操作:

bool b1 = (10 == 5);  // 等于
bool b2 = (10 != 5);  // 不等于
bool b3 = (10 > 5);   // 大于
bool b4 = (10 < 5);   // 小于
bool b5 = (10 >= 5);  // 大于等于
bool b6 = (10 <= 5);  // 小于等于

逻辑运算符

用于布尔逻辑运算:

bool b7 = true && false;  // 逻辑与
bool b8 = true || false;  // 逻辑或
bool b9 = !true;          // 逻辑非

位运算符

对整数进行位级操作:

unsigned int a = 5 & 3;   // 位与
unsigned int b = 5 | 3;   // 位或
unsigned int c = 5 ^ 3;   // 位异或
unsigned int d = ~5;      // 位取反
unsigned int e = 5 << 1;  // 左移
unsigned int f = 5 >> 1;  // 右移

赋值运算符

基本赋值和复合赋值:

int x = 10;   // 基本赋值
x += 5;       // 等价于x = x + 5
x -= 3;       // 等价于x = x - 3
x *= 2;       // 等价于x = x * 2
x /= 4;       // 等价于x = x / 4
x %= 3;       // 等价于x = x % 3

其他重要运算符

条件运算符(三元运算符):

int max = (a > b) ? a : b;

逗号运算符:

int x = (a = 5, b = 10, a + b);  // x = 15

sizeof运算符:

size_t s = sizeof(int);  // 获取类型或对象的大小

成员访问运算符:

obj.member;    // 对象成员访问
ptr->member;   // 指针成员访问

类型转换运算符:

double d = static_cast<double>(5);  // 静态类型转换

运算符优先级

C++运算符有严格的优先级规则,高优先级运算符先计算。常见优先级从高到低:

  1. 作用域解析(::)
  2. 成员访问(., ->)
  3. 后缀自增/减(++, --)
  4. 逻辑非(!), 位取反(~), 正负号(+, -)
  5. 乘法(*), 除法(/), 取模(%)
  6. 加法(+), 减法(-)
  7. 移位(<<, >>)
  8. 关系运算符(<, <=, >, >=)
  9. 相等性(==, !=)
  10. 位与(&)
  11. 位异或(^)
  12. 位或(|)
  13. 逻辑与(&&)
  14. 逻辑或(||)
  15. 条件运算符(?:)
  16. 赋值运算符(=, +=, -=等)
  17. 逗号运算符(,)

运算符重载

C++允许自定义运算符行为:

class Vector {
public:
    Vector operator+(const Vector& other) {
        Vector result;
        result.x = x + other.x;
        result.y = y + other.y;
        return result;
    }
};

注意事项

  • 避免运算符优先级混淆,必要时使用括号明确运算顺序
  • 注意整数除法的截断问题
  • 自增自减运算符的前后置区别
  • 避免未定义行为,如除零或移位负数
  • 谨慎使用类型转换,可能丢失精度
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐