zoukankan      html  css  js  c++  java
  • C++11:01auto关键字

    auto类型推导

    1、auto的新含义

    • 在C++98/03中auto局部变量,与static关键字相对。
    • C++11中auto的新功能是类型推导
      • 使用auto声明的变量必须马上初始化,让编译器推断出它的类型,同时在编译时将auto占位符替换为真正的类型(即分配空间)。
    • 深刻理解以下代码
    auto x = 5;
    auto pi = new auto(1);
    const auto *v = &x,u = 6;
    static auto y = 0.0;
    auto int r;
    auto s;
    

    2、auto的推导规则

    • 1、当不声明为指针或引用时,auto的推导结果和初始化表达式抛弃引用和cv限定符(const和volatile限定符的统称)后类型一致。
    • 2、当声明为指针或引用时,auto的推导结果将保持初始化表达的cv属性。
    • 关联知识:auto的推导和函数模板参数的自动推导有相似之处
    • 深刻理解以下代码
    int x = 0;
    auto *a = &x; //auto 推导为int
    auto b = &x; //auto被推导为int*
    auto &c = x; //auto被推导为int
    auto d = c;  //auto被推导为int
    
    const auto e = x;  //e ->const int
    auto f = e;  //f ->int
    
    const auto &g = x;  //e ->const int &
    auto &h = g; //f ->const int&
    

    3、auto的限制

    • 1、auto不能用于函数参数
    • 2、auto不能用于非静态成员变量
    • 这部分理解得不够深刻,毕竟只是看,没有在项目中实践过呢

    4、什么时候用auto

    • 1、迭代器的定义中,省略STL容器的类型
    std::map<double,double>resultMap;
    std::map<double,double>::iterator it = resultMap.beign();//原来的写法
    auto it = resultMap.begin();//现在的写法
    
    • 2、待理解的新场景

    ReadMe

    • 1、20200420第1版:参考《深入应用C++11》1.1.1的内容
      • 第3部分内容不太理解;第4部分只理解了4.1。
  • 相关阅读:
    1130
    Oracle 数据库常用操作语句大全
    Oracle用sys登陆报:ORA-28009:connection as sys should be as sysdba
    导出数据报ORA-39002: 操作无效 ORA-39070: 无法打开日志文件。 ORA-39087: 目录名 DUMP_DIR 无效
    SGI STL源码stl_bvector.h分析
    SGI STL源码stl_vector.h分析
    CGI 萃取技术 __type_traits
    迭代器iterator和traits编程技法
    智能指针分析及auto_ptr源码
    C++深拷贝和浅拷贝细节理解
  • 原文地址:https://www.cnblogs.com/fewolflion/p/12741644.html
Copyright © 2011-2022 走看看