增加行内代码标识

This commit is contained in:
wendajiang 2020-06-26 15:35:22 +08:00
parent 18cc625293
commit 4e372bb755

View File

@ -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