diff --git a/2.auto/item5.md b/2.auto/item5.md index f379014..adee099 100644 --- a/2.auto/item5.md +++ b/2.auto/item5.md @@ -16,7 +16,7 @@ int x; 别介意,让我们转换一个话题, 对一个局部变量使用解引用迭代器的方式初始化: ````cpp -template +template void dwim(It b, It e) { while(b!=e){ @@ -136,4 +136,4 @@ for(const auto & p : m) 记住 + auto变量必须初始化,通常它可以避免一些移植性和效率性的问题,也使得重构更方便,还能让你少打几个字。 -+ 正如Item2和6讨论的,auto类型的变量可能会踩到一些陷阱。 \ No newline at end of file ++ 正如Item2和6讨论的,auto类型的变量可能会踩到一些陷阱。 diff --git a/2.auto/item6.md b/2.auto/item6.md index 108e84b..87759cf 100644 --- a/2.auto/item6.md +++ b/2.auto/item6.md @@ -92,15 +92,15 @@ double calEpsilon(); ````cpp float ep = calEpsilon(); ```` -但是这几乎就是在说“我故意减少函数返回值的精度”。使用显式类型初始器惯用法我们可以这样: +但是这几乎没有表明“我确实要减少函数返回值的精度”。使用显式类型初始器惯用法我们可以这样: ````cpp auto ep = static_cast(calEpsilon()); ```` -同样的原因如果你想有一个浮点表达式,你故意的用int存储你也可以使用这个惯用法。假如你需要计算一个随机访问迭代器(比如std::vector,std::deque,std::array)中某元素的下标,你给它一个0.0到1.0的值表明这个元素离容器的头部有多远(0.5意味着位于容器中间)。进一步假设你很自信结果下标是int。如果容器是c,d是double类型变量,你可以用这样的方法计算容器下标: +处于同样的原因,如果你故意想用int类型存储一个表达式返回的float类型的结果,你也可以使用这个方法。假如你需要计算一个随机访问迭代器(比如std::vector,std::deque,std::array)中某元素的下标,你给它一个0.0到1.0的值表明这个元素离容器的头部有多远(0.5意味着位于容器中间)。进一步假设你很自信结果下标是int。如果容器是c,d是double类型变量,你可以用这样的方法计算容器下标: ````cpp int index = d * c.size(); ```` -但这里你故意把double转化为右边的int使这段代码表意不明,显式类型初始器可以帮助你正确表意: +但是这种写法并没有明确表明你想将右侧的double类型转换成int类型,显式类型初始器可以帮助你正确表意: ````cpp auto index = static_cast(d * size()); ```` @@ -108,4 +108,4 @@ auto index = static_cast(d * size()); 记住 + 不可见的代理类可能会使auto从表达式中推导出“错误的”类型 -+ 显式类型初始器惯用法强制auto推导出你想要的结果 \ No newline at end of file ++ 显式类型初始器惯用法强制auto推导出你想要的结果