• c++ auto类型说明符


    文章来源 链接

    c++ auto类型说明符

    编程是常常需要把表达式的值赋给变量,这就要求子再声明变量的时候清楚知道表达式的类型,然而要做到这一点并不容易,有时候根本做不到。为了解决问题,c++11标准引入了auto类型说明符,用它就能让编译器替我们去分析表达式的类型。

    与原来那些类型说明符不同,auto让编译器通过初始值来推算变量类型。显然,auto定义的变量必须要有初始值。

    使用auto 具有以下好处:

    1. 可靠性:如果表达式的类型发生更改,也能工作。
    2. 性能:确保不会进行转换。
    3. 效率:代码变得高效。
    4. 可用性:不必担心类型名称拼写困难和拼写有误。
    auto it=val1+val2;///有val1和val2相加的结果推断it的类型。
    auto i=0,*p=&i;///i是整数,p是整型指针

    使用auto 能在一条语句声明多个变量。但是一条语句只能有一个基本数据类型,所以该语句中所有变量的初始基本数据类型都必须一致

    auto it=0,pp=3.14///错误

    编译器推断出的auto 类型有时候和初始值类型并不完全一样,编译器会适当地改变结果类型使其更符合初始化规则,例如:

    • 使用auto 会删除引用
    int count =10 ;
    int &countref = count ;
    auto myauto = countref;
    
    countref=11;
    cout<<count<<" "; //print 11
    
    myauto =12;
    cout<<count<<endl; //print 11

    你可能会认为myauto是一个int引用,但她不是,它只是一个int,因为输出为 11 11,而不是11 12;如果auto尚未删除此引用,则会出现此情况。

    • const 限定符
      先引入一种表述:顶层 const 表示指针本身是一个常量,底层 const 表示指针所指的对象是一个常量。一般auto 会忽略掉顶层 const,同时底层const则会保留下来,例如:
    int i = 0const int ci = i, &cr = ci;
    auto b = ci;///b是一个整数(ci的顶层const特性被忽略掉)
    auto c = cr;///c是一个整数(cr是ci的别名,ci本身是一个顶层const)
    auto d = &i;///d是一个整型指针(整数的地址就是指向整数的指针)
    auto e = &ci;///e是一个指向整数常量的指针(对常量对象取地址是一种底层const)
    
    

    还可以引用类型设置为auto,此时原来的初始化规则仍然适用:

    auto &g = ci ; ///g是一个整型常量引用,绑定到ci
    auto &h = 42/// 错误,不能为非常量引用绑定字面值
    const auto &j = 42/// 可以为常量引用绑定字面值

    切记,符号 * 和 & 只能从属于某一个声明,而非基本数据类型的一部分,因此初始值必须是同一个类型:

    auto k = ci, &l = i;///k是整数,l是整型引用
    auto &m = ci, *p = &ci;///m是对整型常量的引用,p是指向整型常量的指针
    auto &n = i,*pp = &ci;///错误!i的类型是int,而&ci的类型是const int
  • 相关阅读:
    后端开发-IDEA-SSM框架-mapper扫描
    测试软件注意事项
    字符串中重复最多的字符及重复次数
    【windows】server2012R2 服务器的日志出现大量Windows安全日志事件ID 4625
    【办公】管理员已阻止你运行此应用。有关详细信息,请与管理员联系。windows10
    【linux】dellR420更换系统盘,重做系统
    【mysql】MySQL InnoDB 表损坏,显示错误: “MySQL is trying to open a table handle but the .ibd file for table ### does not exist”
    【linux】服务器的网站后台无法上传图片报错error‘8’,云锁文件删除无法删除
    【linux】记录一次服务器无法使用ssh 错误修改文件导致服务器无法启动
    【linux】nginx访问量统计
  • 原文地址:https://www.cnblogs.com/nanfenggu/p/7900037.html
Copyright © 2020-2023  润新知