item10:update

This commit is contained in:
racaljk 2017-10-12 20:51:50 +08:00
parent 5b22e3d1ff
commit 4a5f03b229
2 changed files with 26 additions and 11 deletions

View File

@ -0,0 +1,22 @@
## Item 10:优先考虑限域枚举而非未限域枚举
条款10:优先考虑限域枚举而非未限域枚举
通常来说在花括号中声明一个名字会限制它的作用域在花括号之内。但这对于C++98风格的enum中声明的枚举名是不成立的。这些在enum作用域中声明的枚举名所在的作用域也包括enum本身也就是说这些枚举名和enum所在的作用域中声明的相同名字没有什么不同
```cpp
enum Color { black, white, red }; // black, white, red 和
// Color一样都在相同作用域
auto white = false; // 错误! white早已在这个作用
// 域中存在
```
事实上这些枚举名泄漏进和它们所被定义的enum域一样的作用域有一个官方的术语未限域(unscoped)枚举。在C++11中它们有一个相似物限域枚举它不会导致枚举名泄漏
```cpp
enum class Color { black, white, red }; // black, white, red
// 限制在Color域内
auto white = false; // 没问题,同样域内没有这个名字
Color c = white; //错误这个域中没有white
Color c = Color::white; // 没问题
auto c = Color::white; // 也没问题也符合条款5的建议
```
因为限域枚举是通过**enum class**声明,所以它们有时候也被称为枚举类(enum classes)。

View File

@ -1,7 +1,9 @@
# 《Effective Modern C++ 》翻译
![bookLogo](http://p1.bpimg.com/567571/bc7c228ba08fae01.png)
> 本书要求读者有较高水平的C++知识<br>
> ! 2017.10开始更新<br>
> ! 我没有版权我没有版权我没有版权侵权请告知1948638989@qq.com<br>
> 本书要求读者具有C++基础<br>
> !未翻译的条款名称现在直译,翻译时可能适当修改<br>
> 条款后的revised表明该条款已经经过初步修订<br>
@ -18,7 +20,7 @@
1. [Item 7:区别使用()和{}创建对象](https://github.com/racaljk/EffectiveModernCppChinese/blob/master/3.MovingToModernCpp/item7.md)
2. [Item 8:优先考虑nullptr而非0和NULL](https://github.com/racaljk/EffectiveModernCppChinese/blob/master/3.MovingToModernCpp/item8.md)
3. [Item 9:优先考虑别名声明而非typedefs](https://github.com/racaljk/EffectiveModernCppChinese/blob/master/3.MovingToModernCpp/item9.md)
4. Item 10:优先考虑域内enum而非域外enum
4. [Item 10:优先考虑限域枚举而非未限域枚举](https://github.com/racaljk/EffectiveModernCppChinese/blob/master/3.MovingToModernCpp/item10.md) _updating_
5. Item 11:优先考虑使用delete而非使用未定义的私有声明
6. Item 12:使用override声明重载函数
7. Item 13:优先考虑const_iterator而非iterator
@ -56,12 +58,3 @@
8. 微调
1. Item 41:对于那些可移动总是被拷贝的形参使用传值方式
2. Item 42:考虑就地创建而非插入
## 翻译相关
+ constness译为常量性volatitleness译为易变性reference-ness视情况直接译为引用
+ built-in译为内置而不是内建
+ literal译为字面值
+ 诚恳接受typo-pull-request以及错译pr
+ 我蒟多线程方面(7.)基础薄弱,所幸译前还有大量时间进行知识储备
+ 翻译到后面我觉得要想坚持不写译注几乎不可能所以译注将会以_[num]_标出详细内容将会出现在文末。
+ :)