Merge pull request #1 from deximy/deximy

Update item5.md
This commit is contained in:
deximy 2020-07-16 23:55:52 -05:00 committed by GitHub
commit edb4b09fc4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 6 deletions

View File

@ -16,7 +16,7 @@ int x;
别介意,让我们转换一个话题, 对一个局部变量使用解引用迭代器的方式初始化: 别介意,让我们转换一个话题, 对一个局部变量使用解引用迭代器的方式初始化:
````cpp ````cpp
template<typename T> template<typename It>
void dwim(It b, It e) void dwim(It b, It e)
{ {
while(b!=e){ while(b!=e){
@ -136,4 +136,4 @@ for(const auto & p : m)
记住 记住
+ auto变量必须初始化通常它可以避免一些移植性和效率性的问题也使得重构更方便还能让你少打几个字。 + auto变量必须初始化通常它可以避免一些移植性和效率性的问题也使得重构更方便还能让你少打几个字。
+ 正如Item2和6讨论的auto类型的变量可能会踩到一些陷阱。 + 正如Item2和6讨论的auto类型的变量可能会踩到一些陷阱。

View File

@ -92,15 +92,15 @@ double calEpsilon();
````cpp ````cpp
float ep = calEpsilon(); float ep = calEpsilon();
```` ````
但是这几乎就是在说“我故意减少函数返回值的精度”。使用显式类型初始器惯用法我们可以这样: 但是这几乎没有表明“我确实要减少函数返回值的精度”。使用显式类型初始器惯用法我们可以这样:
````cpp ````cpp
auto ep = static_cast<float>(calEpsilon()); auto ep = static_cast<float>(calEpsilon());
```` ````
同样的原因如果你想有一个浮点表达式你故意的用int存储你也可以使用这个惯用法。假如你需要计算一个随机访问迭代器比如std::vector,std::deque,std::array中某元素的下标你给它一个0.0到1.0的值表明这个元素离容器的头部有多远0.5意味着位于容器中间。进一步假设你很自信结果下标是int。如果容器是cd是double类型变量你可以用这样的方法计算容器下标 处于同样的原因如果你故意想用int类型存储一个表达式返回的float类型的结果你也可以使用这个方法。假如你需要计算一个随机访问迭代器比如std::vector,std::deque,std::array中某元素的下标你给它一个0.0到1.0的值表明这个元素离容器的头部有多远0.5意味着位于容器中间。进一步假设你很自信结果下标是int。如果容器是cd是double类型变量你可以用这样的方法计算容器下标
````cpp ````cpp
int index = d * c.size(); int index = d * c.size();
```` ````
这里你故意把double转化为右边的int使这段代码表意不明,显式类型初始器可以帮助你正确表意: 是这种写法并没有明确表明你想把double类型转换成int类型,显式类型初始器可以帮助你正确表意:
````cpp ````cpp
auto index = static_cast<int>(d * size()); auto index = static_cast<int>(d * size());
```` ````
@ -108,4 +108,4 @@ auto index = static_cast<int>(d * size());
记住 记住
+ 不可见的代理类可能会使auto从表达式中推导出“错误的”类型 + 不可见的代理类可能会使auto从表达式中推导出“错误的”类型
+ 显式类型初始器惯用法强制auto推导出你想要的结果 + 显式类型初始器惯用法强制auto推导出你想要的结果