-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathc++11新标准的编码准则
41 lines (30 loc) · 1.77 KB
/
c++11新标准的编码准则
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
before(c 语言标准):
在c 语言标准下, 你需要将函数内所有变量声明前置, 防止编译器偷步优化造成逻辑混乱;
after(c++ 语言标准):
在c++语言标准下, 由于新的c++ 语法比较混乱, 临时变量乱飞,
这种情况下, 维持函数内所有变量声明前置, 这样的编码维护成本较高, 适当松绑也是可以的;
重点:
如果是auto 类型, 一定不能将auto 类型前置, 更不能复用auto 类型;
因为复用auto 类型是一个危险的决定, 有可能存在:
line12: auto类型的需求是int
line45: auto类型的需求是std::string
line56: auto类型的需求是double
...
但你只定义了一个auto tmp; 实体, 那么则会有:
auto tmp = (int)unknow_val;
auto tmp = (std::string)unknow_val;
auto tmp = (double)unknow_val;
这样就算c++ 设计出auto 类型, 让编译器自动识别你需要的变量类型,
但编译器也不能用一个tmp 实体, 都初始化成int/double/std::string 类型;
这时候, 除了内存消耗较多的弊端之外,
编码时, 你还得想想我这个tmp 变量, 是否被占用过, 如果被占用过, 类型是否匹配, 不匹配的类型可能会引发bug;
所以, 这里立一个规矩:
* c++ 函数局部变量, 如果不打算前置变量, 请使用auto 类型, 使用auto 类型一定不能重用, 只能一次性使用;
* c++ 函数局部变量, 如果打算前置变量, 请明确变量的类型(指名道姓), 声明了明确的类型, 可以重用;
(节省内存, 提高编译器效率, 减少出错的可能性, 但维护成本高)
再次声明变量前置的好处:
* 更强的'跨芯片/跨编译器/跨系统'的跨平台能力
* 更节约内存, 性能更好
* 编译器解析更快
缺点:
* 编码维护成本较高