zoukankan      html  css  js  c++  java
  • 记录为什么迭代器类型用auto进行推导的一个原因

    有如下代码:

    std::map<std::string, int> str_int_map;
    // ...
    
    for (const std::pair<std::string, int> &item : str_int_map)
    {
    	// ...
    }
    

    尽管 item 并非严格意义上的迭代器,但总之是循环因子类似的东西,这段代码有意思的是,尽管指示了引用修饰符,但仍旧不是一段好的代码,原因在于 std::string 执行了复制操作。

    为什么呢?

    因为 map 的每个元素的类型实际是 std::pair<const std::string, int> , 而非 std::pair<std::string, int> 。由于类型不匹配,所以做了一份拷贝生成出匹配的类型对象。

    如果使用 auto ,就会避免这样的问题:

    for (const auto &item : str_int_map)
    {
    	//...
    }
    
  • 相关阅读:
    Java
    paratest
    ccnet
    资料
    ccnet
    判断类被某个属性应用
    有趣的数学 -- 数学归纳法 -- 互不重叠的单位正方形
    排序算法 -- 堆排序
    APUE CH10 Signals
    APUE CH9 Process Relationship
  • 原文地址:https://www.cnblogs.com/demon90s/p/15484835.html
Copyright © 2011-2022 走看看