From 4a5f03b2291c67e3c04c5506ce4d3d19bc6e5ef7 Mon Sep 17 00:00:00 2001
From: racaljk <1948638989@qq.com>
Date: Thu, 12 Oct 2017 20:51:50 +0800
Subject: [PATCH] =?UTF-8?q?item10=EF=BC=9Aupdate?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
3.MovingToModernCpp/item10.md | 22 ++++++++++++++++++++++
README.md | 15 ++++-----------
2 files changed, 26 insertions(+), 11 deletions(-)
create mode 100644 3.MovingToModernCpp/item10.md
diff --git a/3.MovingToModernCpp/item10.md b/3.MovingToModernCpp/item10.md
new file mode 100644
index 0000000..eb1e0e7
--- /dev/null
+++ b/3.MovingToModernCpp/item10.md
@@ -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)。
diff --git a/README.md b/README.md
index 2d4ba8d..6740fe9 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,9 @@
# 《Effective Modern C++ 》翻译

-> !本书要求读者有较高水平的C++知识
+> ! 2017.10开始更新
+> ! 我没有版权,我没有版权,我没有版权,侵权请告知1948638989@qq.com
+> !本书要求读者具有C++基础
> !未翻译的条款名称现在直译,翻译时可能适当修改
> !条款后的revised表明该条款已经经过初步修订
@@ -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]_标出,详细内容将会出现在文末。
-+ :)
\ No newline at end of file