Skip to content

Commit 6062aae

Browse files
committed
Add New Article
1 parent 7846ca3 commit 6062aae

File tree

3 files changed

+225
-4
lines changed

3 files changed

+225
-4
lines changed

source/Language Core/Chapter-2/Section-05.md

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ auto 变量名称 {值};
1515
代码演示:
1616
1717
```CPP
18-
auto x = 10; // int
19-
auto y = 3.14; // double
20-
auto z = 'A'; // char
18+
auto x{10}; // int
19+
auto y{3.14}; // double
20+
auto z{'A'}; // char
2121
```
2222

2323
```{attention}
@@ -38,6 +38,16 @@ auto b{a}; // b 的类型是 int(const 被丢弃)
3838
const auto c{a}; // c 的类型是 const int
3939
```
4040
41+
```CPP
42+
int x{10};
43+
int& ref = x;
44+
45+
auto a{ref}; // a 是 int(引用被丢弃)
46+
auto& b{ref}; // b 是 int&
47+
```
48+
49+
auto 在推导时默认会丢弃引用,如果需要保留引用,必须使用 auto&。
50+
4151
优点:
4252

4353
- 减少代码冗余
@@ -73,11 +83,20 @@ decltype(x) y{20}; // y 的类型是 int
7383
```CPP
7484
const int a{10};
7585

76-
decltype(a) b = 10; // b 的类型是 const int
86+
decltype(a) b{10}; // b 的类型是 const int
7787
```
7888
7989
decltype 会完整保留 const 属性,如果赋值不符合 const 要求将导致编译错误。
8090
91+
```CPP
92+
int x{10};
93+
94+
decltype(x) a{x}; // int
95+
decltype((x)) b{x}; // int&
96+
```
97+
98+
decltype(x) 表示变量类型,而 decltype((x)) 会被视为表达式,从而推导为引用类型。
99+
81100
## 使用建议
82101

83102
- 类型复杂时优先使用 auto
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
# 基本运算符
2+
3+
在 C++ 中,运算符用于对数据进行各种操作,例如计算、比较、逻辑判断等。
4+
5+
运算符通常作用于一个或多个操作数,并返回一个结果。
6+
7+
常见的运算符主要包括:
8+
9+
- 算术运算符
10+
- 赋值运算符
11+
- 比较运算符
12+
- 逻辑运算符
13+
- 自增 / 自减运算符
14+
15+
## 算术运算符
16+
17+
算术运算符是 C++ 中用于进行基本数学运算的符号
18+
19+
|运算符|说明|
20+
|:---:|:---:|
21+
|+|加法|
22+
|-|减法|
23+
|*|乘法|
24+
|/|除法|
25+
|%|取余|
26+
27+
```CPP
28+
int a{10};
29+
int b{3};
30+
31+
int c{a + b}; // 13
32+
int d{a - b}; // 7
33+
int e{a * b}; // 30
34+
int f{a / b}; // 3(整数除法)
35+
int g{a % b}; // 1
36+
```
37+
38+
当两个整数进行除法运算时,结果仍然是整数,小数部分会被直接丢弃。
39+
40+
## 赋值运算符
41+
42+
用于给变量进行赋值的符号
43+
44+
### 基本赋值运算符
45+
46+
用于将数据赋值给变量。
47+
48+
|运算符|示例|说明|
49+
|:---:|:---:|:---:|
50+
|=|a   =   15;|将右侧数据赋值给左侧变量|
51+
|{}|a  {15};|将花括号内的数据赋值给左侧变量|
52+
53+
`{}` 是从 C++ 11 引入的本质上与 `=` 是相同的,但解决了“隐式缩窄”等问题。
54+
55+
### 复合赋值运算符
56+
57+
|运算符|示例|等价写法|
58+
|:---:|:---:|:---:|
59+
|+=|a   +=   b|a  {a   +   b}|
60+
|-=|a   -=   b|a  {a   -   b}|
61+
|*=|a   *=   b|a  {a   *   b}|
62+
|/=|a   /=   b|a  {a   /   b}|
63+
|%=|a   %=   b|a  {a   %   b}|
64+
65+
```CPP
66+
int a{10};
67+
68+
a += 5; // 15
69+
a *= 2; // 30
70+
```
71+
72+
## 比较运算符
73+
74+
常用于在逻辑运算或条件判断中比较两个值的大小关系,结果为布尔值(true 或 false)。
75+
76+
|运算符|说明|
77+
|:---:|:---:|
78+
|==|等等于: 检查两个值是否相等。如果相等,则条件为真(true),否则为假(false)|
79+
|!=|不等于: 检查两个值是否不相等。如果不相等,则条件为真(true),否则为假(false)|
80+
|>|大于: 检查左侧的值是否⼤于右侧的值。如果是,则条件为真(true),否则为假(false)|
81+
|<|小于: 检查左侧的值是否⼩于右侧的值。如果是,则条件为真(true),否则为假(false)|
82+
|>=|大于等于: 检查左侧的值是否⼤于或等于右侧的值。如果是,则条件为真(true),否则为假(false)|
83+
|<=|小于等于: 检查左侧的值是否⼩于或等于右侧的值。如果是,则条件为真(true),否则为假(false)|
84+
85+
```CPP
86+
int a{10};
87+
int b{20};
88+
89+
bool r1{a == b}; // a 不等于 b 结果为 false
90+
bool r2{a < b}; // a 小于 b 结果为 true
91+
```
92+
93+
```{attention}
94+
在 C++ 11 之前我们常使用 '=' 为变量进行赋值,许多初学者会将 '=' 和 '==' 混淆这是最常见的初学者错误之一。
95+
因此我们在进行变了赋值的时候应尽可能的使用 '{}' 符号。
96+
```
97+
98+
## 逻辑运算符
99+
100+
常用于条件判断或用于组合多个条件表达式。
101+
102+
|运算符|说明|
103+
|:---:|:---:|
104+
|&&|逻辑与(且): 当所有条件都为真时,结果为真,否则为假|
105+
|\|\||逻辑或: 当任意⼀个语句为真,则结果为真,所有语句都为假时,结果为假|
106+
|!|逻辑非(取反): ⽤于取反逻辑状态,真变假,假变真|
107+
108+
```CPP
109+
int a{10};
110+
int b{20};
111+
112+
bool r{a < b && b > 0}; // a 小于 b 且 b 大于 0 结果为 true
113+
bool r{a < b || b > 100}; // a 小于 b 左侧条件成立 结果为 true
114+
bool r3{!(a < b)}; // a 小于 b 取反 结果为 false
115+
```
116+
117+
逻辑运算符具有“短路特性”,当结果已经确定时,后续表达式不会执行。
118+
119+
## 自增减运算符
120+
121+
用于对变量进行自加或自减操作。
122+
123+
| 运算符 | 说明 |
124+
|:---:|:---:|
125+
| `++` | 自增 |
126+
| `--` | 自减 |
127+
128+
自增与自减分为前置自增和后置自增自减也分为前置自减和后置自减。
129+
130+
### 前置自增 / 前置自减
131+
132+
```CPP
133+
int x{10};
134+
135+
int y{++x}; // x = 11,y = 11
136+
int z{--x}; // x = 10, z = 10
137+
```
138+
139+
### 后置自增 / 后置自减
140+
141+
```CPP
142+
int x{10};
143+
144+
int y{x++}; // y = 10,x = 11
145+
int z{x--}; // z = 11,x = 10
146+
```
147+
148+
```{attention}
149+
前置运算符是“先修改再使用”,后置运算符是“先使用再修改”。
150+
```
151+
152+
## 运算符优先级
153+
154+
当一个表达式中包含多个运算符时,编译器需要根据一定的规则来决定运算顺序,这个规则称为 **运算符优先级**。运算符优先级决定了应该“先算谁,后算谁”。
155+
156+
```CPP
157+
int x{10 + 5 * 2}; // 20
158+
159+
/* 执行顺序
160+
* 5 * 2 = 10
161+
* 10 + 10 = 20
162+
*/
163+
```
164+
165+
若你想让某个数据优先进行计算可以使用括号改变优先级
166+
167+
```CPP
168+
int x{(10 + 5) * 2}; // 30
169+
170+
/* 执行顺序
171+
* 10 + 5 = 15
172+
* 15 * 2 = 30
173+
*/
174+
```
175+
176+
在 C++ 中括号的优先级最高,建议在复杂表达式中使用括号来明确运算顺序。
177+
178+
优先级(高 ---> 低):
179+
180+
```TEXT
181+
()
182+
> ++ --
183+
> * / %
184+
> + -
185+
> < <= > >=
186+
> == !=
187+
> &&
188+
> ||
189+
> = += -= ...
190+
```
191+
192+
记忆规则:
193+
194+
算术 > 比较 > 逻辑 > 赋值
195+
196+
使用建议:
197+
198+
- 能加括号就加括号
199+
- 不依赖记忆优先级写代码
200+
- 复杂表达式尽量拆分
201+
- 优先保证代码可读性

source/Language Core/Chapter-2/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ Section-02
88
Section-03
99
Section-04
1010
Section-05
11+
Section-06
1112
```

0 commit comments

Comments
 (0)