Skip to content

Commit 50058c3

Browse files
committed
update
1 parent 60af660 commit 50058c3

31 files changed

+178
-171
lines changed

README.md

Lines changed: 56 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
学习C++内容,包括理论、源码、实践、课程代码、项目等。
66

7-
### 1.基础部分
7+
### 1.基础进阶
88

99
- [const那些事](./basic_content/const)
1010
- [static那些事](./basic_content/static)
@@ -34,14 +34,13 @@
3434

3535
---
3636

37+
### 2.C++2.0新特性
3738

38-
### 2.进阶部分
39+
#### 2.0 概况
3940

40-
#### 2.1 [effective_c++](./effective_c++)
41+
C++2.0简称包括C++11/14/17/20。
4142

42-
正在更新...
43-
44-
#### 2.2 [C++2.0新特性](./c++2.0/)
43+
#### 2.1 [C++11新特性](./c++2.0/c++11)
4544

4645
- [Variadic Templates](./c++2.0/variadic)
4746

@@ -110,14 +109,15 @@
110109
111110
学习资料:https://www.bilibili.com/video/av51863195?from=search&seid=3610634846288253061
112111
113-
#### 2.3 [C++并发编程v1](./c++2.0/./concurrency_v1)
112+
### 2.2 C++14/17/20
114113
115-
- [第一章](./c++2.0/./concurrency_v1/chapter1)
116-
- [第二章](./c++2.0/./concurrency_v1/chapter2)
114+
待更新...
117115
118-
学习资料:https://chenxiaowei.gitbook.io/cpp_concurrency_in_action/
116+
### 3.设计模式
119117
120-
#### 2.4 [STL源码剖析](./stl_src)
118+
- [单例模式](./design_pattern/singleton)
119+
120+
### 4. [STL源码剖析](./stl_src)
121121
122122
**stl源码剖析:gcc4.9.1**
123123
@@ -137,13 +137,18 @@
137137
- [myhashtable](./stl_src/myhashtable.md)
138138
- [unordered_map](./stl_src/unordered_map.md)
139139
140-
## 3.设计模式
140+
### 4. [并发编程](./c++2.0/./concurrency_v1)
141141
142-
- [单例模式](./design_pattern/singleton)
142+
#### 4.1 C++ Concurrency in Action
143+
144+
- [第一章](./c++2.0/./concurrency_v1/chapter1)
145+
- [第二章](./c++2.0/./concurrency_v1/chapter2)
146+
147+
学习资料:https://chenxiaowei.gitbook.io/cpp_concurrency_in_action/
143148
144-
## 4.多线程与多进程
149+
#### 4.2 多线程与多进程
145150
146-
### 4.1 Threading In C++
151+
##### 4.2.1 Threading In C++
147152
148153
- [介绍](./Threading_In_CPlusPlus/1.thread)
149154
- [创建线程的五种类型](./Threading_In_CPlusPlus/2.create_type)
@@ -154,9 +159,19 @@
154159
>
155160
> https://www.youtube.com/watch?v=eZ8yKZo-PGw&list=PLk6CEY9XxSIAeK-EAh3hB4fgNvYkYmghp&index=4
156161
157-
### 5.学习课程
162+
### 5. [C++惯用法](./codingStyleIdioms)
158163
159-
#### 5.1 [极客时间《现代C++实战30讲》](https://time.geekbang.org/channel/home)
164+
##### 你最喜欢的c++编程风格惯用法是什么?
165+
166+
- [1.类初始化列表](./codingStyleIdioms/1_classInitializers)
167+
- [2.枚举类替换命名空间](./codingStyleIdioms/2_enumclass_namespace)
168+
- [3.RAII(资源获取即初始化)](./codingStyleIdioms/3_RAII)
169+
- [4.copy and swap](./codingStyleIdioms/4_copy-swap)
170+
- [5.pImpl(指针指向具体实现)](./codingStyleIdioms/5_pImpl)
171+
172+
### 6.学习课程
173+
174+
#### 6.1 [极客时间《现代C++实战30讲》](https://time.geekbang.org/channel/home)
160175
161176
- [堆、栈、RAII:C++里该如何管理资源?](./modern_C++_30/RAII)
162177
- [堆](./modern_++_30/RAII/heap.cpp)
@@ -184,53 +199,43 @@
184199
- [函数对象和lambda:进入函数式编程](./modern_C++_30/functionLambda)
185200
- [内存模型和atomic:理解并发的复杂性](./modern_C++_30/memorymodel_atomic)
186201
187-
### 6.拓展部分
202+
### 7.工具篇
188203
189-
#### 6.1 [C++惯用法](./codingStyleIdioms)
204+
#### 7.1 [容器快捷输出工具](./tool/output)
190205
191-
##### 你最喜欢的c++编程风格惯用法是什么?
206+
对吴老师的代码进行了修改,[点击此处直通代码](./tool/output/output_container.h)
192207
193-
- [1.类初始化列表](./codingStyleIdioms/1_classInitializers)
194-
- [2.枚举类替换命名空间](./codingStyleIdioms/2_enumclass_namespace)
195-
- [3.RAII(资源获取即初始化)](./codingStyleIdioms/3_RAII)
196-
- [4.copy and swap](./codingStyleIdioms/4_copy-swap)
197-
- [5.pImpl(指针指向具体实现)](./codingStyleIdioms/5_pImpl)
208+
输入:
198209
199-
#### 6.2 一些问题
210+
```cpp
211+
map<int, int> mp{
212+
{1, 1},
213+
{2, 4},
214+
{3, 9}};
215+
cout << mp << endl;
216+
```
200217

201-
- [C++中如何将string类型转换为int类型?](./basic_content/extent/string_int.md)
218+
输出结果显示:
202219

203-
### 7.工具篇
220+
```cpp
221+
{ 1 => 1, 2 => 4, 3 => 9 }
222+
```
204223
205-
- [容器快捷输出工具](./tool/output)
224+
#### 7.2 像Python一样简单输出
206225
207-
对吴老师的代码进行了修改,[点击此处直通代码](./tool/output/output_container.h)
226+
- [像Python一样玩C/C++](./tool/像Python一样玩CC++.md)
208227
209-
输入:
228+
#### 7.3 观察编译过程变化
210229
211-
```cpp
212-
map<int, int> mp{
213-
{1, 1},
214-
{2, 4},
215-
{3, 9}};
216-
cout << mp << endl;
217-
```
230+
- [https://cppinsights.io](https://cppinsights.io/)
218231
219-
输出结果显示:
232+
### 8.拓展部分
220233
221-
```cpp
222-
{ 1 => 1, 2 => 4, 3 => 9 }
223-
```
234+
#### 8.1 一些问题
224235
225-
- 像Python一样简单输出
226-
227-
- [像Python一样玩C/C++](./tool/像Python一样玩CC++.md)
228-
229-
- 观察编译过程变化
230-
231-
- [https://cppinsights.io](https://cppinsights.io/)
236+
- [C++中如何将string类型转换为int类型?](./basic_content/extent/string_int.md)
232237
233-
### 8.代码运行
238+
### 9.代码运行
234239
235240
- **代码环境**
236241
@@ -240,7 +245,7 @@
240245
241246
CLion gcc/g++
242247
243-
### 9.关于作者
248+
### 10.关于作者
244249
245250
个人公众号:
246251

basic_content/enum/README.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,54 @@ char c3 = static_cast<char>(Color3::RED);
103103
```
104104

105105
具体实现见:[classic_practice.cpp](classic_practice.cpp)
106+
107+
## 类中的枚举类型
108+
109+
有时我们希望某些常量只在类中有效。 由于#define 定义的宏常量是全局的,不能达到目的,于是想到实用const 修饰数据成员来实现。而const 数据成员的确是存在的,但其含义却不是我们所期望的。
110+
111+
const 数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其 const 数据成员的值可以不同。
112+
113+
不能在类声明中初始化 const 数据成员。以下用法是错误的,因为类的对象未被创建时,编译器不知道 SIZE 的值是什么。(c++11标准前)
114+
115+
```c++
116+
class A
117+
{
118+
const int SIZE = 100; // 错误,企图在类声明中初始化 const 数据成员
119+
int array[SIZE]; // 错误,未知的 SIZE
120+
};
121+
```
122+
123+
正确应该在类的构造函数的初始化列表中进行:
124+
125+
```c++
126+
class A
127+
{
128+
A(int size); // 构造函数
129+
const int SIZE ;
130+
};
131+
A::A(int size) : SIZE(size) // 构造函数的定义
132+
{
133+
134+
}
135+
A a(100); // 对象 a 的 SIZE 值为 100
136+
A b(200); // 对象 b 的 SIZE 值为 200
137+
```
138+
139+
怎样才能建立在整个类中都恒定的常量呢?
140+
141+
别指望 const 数据成员了,应该用类中的枚举常量来实现。例如:
142+
143+
```c++
144+
class Person{
145+
public:
146+
typedef enum {
147+
BOY = 0,
148+
GIRL
149+
}SexType;
150+
};
151+
//访问的时候通过,Person::BOY或者Person::GIRL来进行访问。
152+
```
153+
154+
枚举常量不会占用对象的存储空间,它们在编译时被全部求值。
155+
156+
枚举常量的缺点是:它的隐含数据类型是整数,其最大值有限,且不能表示浮点。

basic_content/this/README.md

Lines changed: 1 addition & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# this指针与类中的枚举类型
1+
# this指针那些事
22

33
## 关于作者
44

@@ -87,54 +87,3 @@ int main(){
8787
会发现编译器把上述的this,变为`const A* const`,这个大家也能想到,因为这个函数是const函数,那么针对const函数,它只能访问const变量与const函数,不能修改其他变量的值,所以需要一个this指向不能修改的变量,那就是`const A*`,又由于本身this是`const`指针,所以就为`const A* const`!
8888

8989
总结:this在成员函数的开始执行前构造,在成员的执行结束后清除。上述的get_age函数会被解析成`get_age(const A * const this)`,`add_age`函数会被解析成`add_age(A* const this,int a)`。在C++中类和结构是只有一个区别的:类的成员默认是private,而结构是public。this是类的指针,如果换成结构,那this就是结构的指针了。
90-
91-
## 2.类中的枚举类型
92-
93-
有时我们希望某些常量只在类中有效。 由于#define 定义的宏常量是全局的,不能达到目的,于是想到实用const 修饰数据成员来实现。而const 数据成员的确是存在的,但其含义却不是我们所期望的。
94-
95-
const 数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其 const 数据成员的值可以不同。
96-
97-
不能在类声明中初始化 const 数据成员。以下用法是错误的,因为类的对象未被创建时,编译器不知道 SIZE 的值是什么。(c++11标准前)
98-
99-
```c++
100-
class A
101-
{
102-
const int SIZE = 100; // 错误,企图在类声明中初始化 const 数据成员
103-
int array[SIZE]; // 错误,未知的 SIZE
104-
};
105-
```
106-
107-
正确应该在类的构造函数的初始化列表中进行:
108-
109-
```c++
110-
class A
111-
{
112-
A(int size); // 构造函数
113-
const int SIZE ;
114-
};
115-
A::A(int size) : SIZE(size) // 构造函数的定义
116-
{
117-
118-
}
119-
A a(100); // 对象 a 的 SIZE 值为 100
120-
A b(200); // 对象 b 的 SIZE 值为 200
121-
```
122-
123-
怎样才能建立在整个类中都恒定的常量呢?
124-
125-
别指望 const 数据成员了,应该用类中的枚举常量来实现。例如:
126-
127-
```c++
128-
class Person{
129-
public:
130-
typedef enum {
131-
BOY = 0,
132-
GIRL
133-
}SexType;
134-
};
135-
//访问的时候通过,Person::BOY或者Person::GIRL来进行访问。
136-
```
137-
138-
枚举常量不会占用对象的存储空间,它们在编译时被全部求值。
139-
140-
枚举常量的缺点是:它的隐含数据类型是整数,其最大值有限,且不能表示浮点。

c++2.0/README.md

Lines changed: 0 additions & 68 deletions
This file was deleted.

0 commit comments

Comments
 (0)