風子の空

C11Auto的优势和劣势

分类:C++

  1. 说明
  2. 优势:
    1、少写代码。
    2、降低隐式转换带来的隐藏开销。
    3、消除跨平台可能带来的bug。

    劣势:
    1、代码阅读上不太直观。
    解决办法有:编译器提醒、编译出错提醒、自行打印检查。

  3. 例子
    • 使用显式类型std::pair

       
                      #include
                      #include
                      #include
                      int main() {
                          std::unordered_map m;
                          m.insert(std::pair("1111",1));
                          std::cout << &(m.at("1111")) << "\n";
                          for(const std::pair& p: m) {
                              std::cout << &p << "\n";
                              std::cout << &(p.first) << "\n";
                              std::cout << &(p.second) << "\n";
                              std::cout << typeid(p).name() << "\n";
                          }
                      }
                          
    • 输出

        
                         0x1f810b0
                         0x7fff748ccaf0
                         0x7fff748ccaf0
                         0x7fff748ccaf8
                         St4pairISsiE
                      
    • 使用auto

      
                     #include
                      #include
                      #include
                      int main() {
                          std::unordered_map m;
                          m.insert(std::pair("1111",1));
                          std::cout << &(m.at("1111")) << "\n";
                          for(const std::pair& p: m) {
                              std::cout << &p << "\n";
                              std::cout << &(p.first) << "\n";
                              std::cout << &(p.second) << "\n";
                              std::cout << typeid(p).name() << "\n";
                          }
                      }  
                          
    • 输出

       
                      0xd960b0
                      0xd960a8
                      0xd960a8
                      0xd960b0
                      St4pairIKSsiE
                                  
                                  
    可以看出使用auto可以保持原有类型,引用使用原值,没有产生copy临时值,节省了资源。