zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    php微信支付v3版签名生成,代金券、微信支付分、支付即服务等
    docker基本命令及搭建php环境
    Nginx 负载均衡搭建
    laravel4.2 union联合,join关联分组查询最新记录时,查询条件不对,解决方案
    抓取腾讯视频弹幕
    laravel4.2 Redis 使用
    201771010106-东文财 实验一 软件工程准备-<构建之法与博客首秀>
    东文财201771010106《面向对象程序设计(java)》.18
    东文财201771010106《面向对象程序设计(java)》17
    201771010106东文财《面向对象程序设计(java)》实验16
  • 原文地址:https://www.cnblogs.com/nanfenggu/p/7900037.html
Copyright © 2011-2022 走看看