文章目录
- 一、运算符
- 1. 算术运算符
- 2. 关系运算符
- 3. 逻辑运算符
- 4. 位运算符
- 5. 赋值运算符
- 6. 条件运算符(三元运算符)
- 7. 成员访问运算符
- 8. 指针和地址运算符
- 9. 类型转换运算符
- 10. 其他运算符
- 二、其他特殊运算符
- 1. 成员访问运算符
- 2. 指针和地址运算符
- 3. 类型转换运算符
- 4. 作用域解析运算符
- 5. 其他特殊运算符
- 6. 复合赋值运算符
- 7. 自增和自减运算符
- 8. 逗号运算符
- 三、运算符优先级
- 1.运算符优先级(从高到低)
- 2. 运算符结合性
- 3. 注意事项
- 四、相关链接
一、运算符
C++ 支持多种运算符,这些运算符用于执行算术运算、关系测试、逻辑运算、位运算、赋值以及特殊操作(如成员访问、指针解引用等)。下面是一些主要的C++运算符分类及其示例:
1. 算术运算符
+
加法-
减法*
乘法/
除法%
求余(模运算)++
自增--
自减
int a = 5, b = 2;
int sum = a + b; // 结果为 7
int product = a * b; // 结果为 10
int remainder = a % b; // 结果为 1
2. 关系运算符
==
等于!=
不等于>
大于<
小于>=
大于等于<=
小于等于
bool result = (a > b); // 结果为 true
3. 逻辑运算符
&&
逻辑与||
逻辑或!
逻辑非
bool isPositive = (a > 0); // 结果为 true
bool isBothPositive = (a > 0) && (b > 0); // 结果为 false
4. 位运算符
&
按位与|
按位或^
按位异或~
按位取反<<
左移>>
右移
int a = 5; // 二进制为 101
int b = 3; // 二进制为 011
int andResult = a & b; // 结果为 1,二进制 001
5. 赋值运算符
=
赋值+=
加后赋值-=
减后赋值*=
乘后赋值/=
除后赋值%=
求余后赋值
a += 2; // 等同于 a = a + 2
6. 条件运算符(三元运算符)
? :
int max = (a > b) ? a : b; // 如果a大于b,则max为a,否则为b
7. 成员访问运算符
.
成员访问->
指针成员访问
struct Point {int x, y;
};
Point p = {1, 2};
int x = p.x; // 访问成员xPoint* ptr = &p;
int y = ptr->y; // 通过指针访问成员y
8. 指针和地址运算符
&
取地址*
解引用指针
int var = 20;
int* ptr = &var; // ptr存储了var的地址
int val = *ptr; // 通过ptr访问var的值
9. 类型转换运算符
static_cast<type>(expr)
dynamic_cast<type>(expr)
reinterpret_cast<type>(expr)
const_cast<type>(expr)
double d = 3.14;
int i = static_cast<int>(d); // 将double转换为int
10. 其他运算符
sizeof
运算符(用于计算类型或变量的大小)new
和delete
运算符(用于动态内存分配和释放)new[]
和delete[]
运算符(用于动态分配和释放数组)
int* p = new int; // 分配一个int类型的内存
delete p; // 释放内存int* arr = new int[10]; // 分配一个包含10个int的数组
delete[] arr; // 释放数组内存
二、其他特殊运算符
C++中的运算符非常丰富,除了常见的算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符外,还包括其他一些重要的运算符。
1. 成员访问运算符
.
(点运算符):用于访问对象的成员(变量或方法)。->
(箭头运算符):用于通过指针访问对象的成员。
2. 指针和地址运算符
&
(取地址运算符):用于获取变量的地址。*
(解引用运算符):用于访问指针所指向的值。
3. 类型转换运算符
static_cast<type>(expr)
:用于基本数据类型之间的转换,以及有继承关系的类之间的转换。dynamic_cast<type>(expr)
:主要用于有继承关系的类之间的安全转换,并用于处理类的层次结构中的向下转换。reinterpret_cast<type>(expr)
:用于进行各种不同类型的指针之间的转换,以及指针和足够大的整数类型之间的转换。const_cast<type>(expr)
:用于修改类型的const或volatile属性。
4. 作用域解析运算符
::
(作用域解析运算符):用于指定类或命名空间的作用域,以访问其成员。
5. 其他特殊运算符
sizeof
:用于获取类型或变量的大小(以字节为单位)。new
和delete
:用于动态内存分配和释放。new[]
和delete[]
分别用于动态分配和释放数组。throw
:用于抛出异常。catch
:与try
和throw
一起使用,用于捕获并处理异常。注意,catch
本身不是单独的运算符,但它是C++异常处理机制中的关键部分。? :
(条件运算符):也称为三元运算符,用于根据条件选择两个值中的一个。
6. 复合赋值运算符
虽然这些在前面的回答中已经提及,但它们是赋值运算符的扩展,包括+=
、-=
、*=
、/=
、%=
、&=
、|=
、^=
、<<=
和>>=
等,它们将算术或位运算的结果直接赋值给左侧的变量。
7. 自增和自减运算符
++
(自增运算符):用于将变量的值增加1。--
(自减运算符):用于将变量的值减少1。
这两种运算符都可以作为前缀(如++a
)或后缀(如a++
)使用,但它们在表达式中的行为略有不同(前缀版本在表达式求值之前改变变量的值,而后缀版本在表达式求值之后改变变量的值)。
8. 逗号运算符
,
(逗号运算符):用于分隔函数参数表中的各参数,或在表达式中分隔多个子表达式,但整个逗号表达式的值是其最右侧子表达式的值。
三、运算符优先级
类别 | 运算符 | 结合性 |
---|---|---|
后缀 | () [] -> . ++ - - | 从左到右 |
一元 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 |
乘除 | * / % | 从左到右 |
加减 | + - | 从左到右 |
移位 | << >> | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | == != | 从左到右 |
位与 AND | & | 从左到右 |
位异或 XOR | ^ | 从左到右 |
位或 OR | 竖杠 | 从左到右 |
逻辑与 AND | && | 从左到右 |
逻辑或 OR | 双竖杠 | 从左到右 |
条件 | ?: 从右到左 | |
赋值 | = += -= *= /= %=>>= <<= &= ^= | = 从右到左 |
逗号 | , | 从左到右 |
1.运算符优先级(从高到低)
- 范围解析运算符
::
- 用于访问类的静态成员或全局变量,当与类名或命名空间名一起使用时。
- 成员访问和数组下标运算符
.
(成员访问)->
(指针成员访问)[]
(数组下标)()
(函数调用或类型转换)
- 后缀和前缀自增/自减运算符
++
(后缀和前缀)--
(后缀和前缀)- 注意:前缀版本(如
++a
)的优先级高于后缀版本(如a++
)。
- 一元运算符
+
(正号)-
(负号)!
(逻辑非)~
(按位取反)&
(取地址)*
(解引用指针)sizeof
(计算类型或变量大小)new
和delete
(动态内存分配和释放)- 强制类型转换运算符(如
(int)x
)
- 乘法、除法和取余运算符
*
(乘法)/
(除法)%
(取余)
- 加法和减法运算符
+
(加法)-
(减法)
- 位移运算符
<<
(左移)>>
(右移)
- 关系运算符
<
(小于)<=
(小于或等于)>
(大于)>=
(大于或等于)
- 相等和不等于运算符
==
(等于)!=
(不等于)
- 按位与运算符
&
(按位与)
- 按位异或运算符
^
(按位异或)
- 按位或运算符
|
(按位或)
- 逻辑与运算符
&&
(逻辑与)
- 逻辑或运算符
||
(逻辑或)
- 条件运算符
? :
(三目运算符)
- 赋值运算符
=
(简单赋值)+=
、-=
、*=
、/=
、%=
、&=
、^=
、|=
、<<=
、>>=
(复合赋值)
- 抛出异常运算符
throw
- 逗号运算符
,
(逗号运算符用于分隔函数参数或表达式中的多个子表达式)
2. 运算符结合性
- 左结合性:大多数运算符都是左结合性的,即从左到右进行运算。例如,算术运算符(如
+
、-
、*
、/
)和关系运算符(如<
、<=
、>
、>=
)等。 - 右结合性:少数运算符是右结合性的,即从右到左进行运算。最典型的是赋值运算符(如
=
、+=
、-=
等)和条件运算符(? :
)。
3. 注意事项
- 当表达式中的运算符优先级相同时,运算顺序由运算符的结合性决定。
- 如果不确定运算符的优先级或结合性,可以使用括号
()
来明确指定运算顺序,以提高代码的可读性和准确性。
四、相关链接
- Visual Studio Code下载地址
- Sublime Text下载地址
- 「C++系列」C++简介、应用领域
- 「C++系列」C++ 基本语法
- 「C++系列」C++ 数据类型
- 「C++系列」C++ 变量类型
- 「C++系列」C++ 变量作用域
- 「C++系列」C++ 常量知识点-细致讲解
- 「C++系列」C++ 修饰符类型
- 「C++系列」一篇文章说透【存储类】