mirror of
https://github.com/CnTransGroup/EffectiveModernCppChinese.git
synced 2025-03-24 00:00:21 +08:00
增加行内代码标识
This commit is contained in:
parent
18cc625293
commit
4e372bb755
@ -110,7 +110,7 @@ for(const std::pair<std::string,int>& p : m)
|
||||
````
|
||||
看起来好像很合情合理的表达,但是这里有一个问题,你看到了吗?
|
||||
|
||||
要想看到错误你就得知道`std::unordered_map`的key是一个常量,所以std::pair的类型不是`std::pair<std::string,int>`而是`std::pair<const std::string,int>`。编译器会努力的找到一种方法把前者转换为后者。它会成功的,因为它会创建一个临时对象,这个临时对象的类型是p想绑定到的对象的类型,即m中元素的类型,然后把p的引用绑定到这个临时对象上。在每个循环迭代结束时,临时对象将会销毁,如果你写了这样的一个循环,你可能会对它的一些行为感到非常惊讶,因为你确信你只是让成为p指向m中各个元素的引用而已。
|
||||
要想看到错误你就得知道`std::unordered_map`的key是一个常量,所以`std::pair`的类型不是`std::pair<std::string,int>`而是`std::pair<const std::string,int>`。编译器会努力的找到一种方法把前者转换为后者。它会成功的,因为它会创建一个临时对象,这个临时对象的类型是p想绑定到的对象的类型,即m中元素的类型,然后把p的引用绑定到这个临时对象上。在每个循环迭代结束时,临时对象将会销毁,如果你写了这样的一个循环,你可能会对它的一些行为感到非常惊讶,因为你确信你只是让成为p指向m中各个元素的引用而已。
|
||||
|
||||
使用auto可以避免这些很难被意识到的类型不匹配的错误:
|
||||
````cpp
|
||||
|
Loading…
Reference in New Issue
Block a user