zoukankan      html  css  js  c++  java
  • C++11 auto类型说明符

      编程时常常需要将表达式的值赋值给变量,这就要求在声明变量前知道表达式的类型,有时候很难预先知道,所以C++11新标准引入了auto类型说明符,其作用就是让编译器替我们去分析表达式的值类型,,auto让编译器通过初始值推算变量的类型,所以auto定义的变量必须有初始值。 

      如:  

    auto result=val1+val2;//result初始化为val1和val2相加的结果

    此处编译器会通过val1和val2相加的结果来推断result的类型,使用auto可以声明多个变量,但是要注意多个变量的类型要一致:

    auto a=1, *p=&i;//正确
    auto sz=0,pi=3.14;//错误:sz和pi的类型明显不符

    复合类型、常量和auto

      编译器推断出来的auto类型有时候和初始值的类型并不完全一样,编译器会适当的改变结果类型来符合初始规则,比如对引用使用auto,我们知道引用其实就是使用引用的对象,特别是当引用作为初始值时,正真参与初始化的起始是对象的值,所以会出现下面的情况:

    int a=0,&b=a;//b为a的引用
    auto c=b;//此时c为int类型

    另外,auto会忽略掉顶层const,而保留底层的const,如果希望auto推断出来的类型是一个顶层const,我们需要明确指出:

    const int ci=i,&ri=ci;
    auto b=ci;//b是一个普通的整数,顶层const被忽略 
    auto c=ri;//c也只是普通的整数,顶层const被忽略
    auto d=&i;//d为整型指针
    auto e=&ci;//e是一个指向整数常量的指针(对const对象取地址是底层const操作)
    const auto f=ci;//明确指出const

    对于引用的类型设为auto,原来的初始化规则依然适用:

    auto &g=ci;//g为整型常量的引用
    const auto &j=42;//j为整型常量的引用

    设置一个类型为auto引用时,初始值中的顶层const保留,因为使用了引用后顶层const 就变为底层const了!

  • 相关阅读:
    获取资源文件 r.drawable中的图片转换为drawable、bitmap
    Android 启动白屏或者黑屏闪现解决
    Android应用截图方法
    史上最全的变量、作用域和内存问题
    RunLoop总结:RunLoop的应用场景(四)
    poj3436 ACM Computer Factory, 最大流,输出路径
    android开发——从相冊中选择图片不裁剪
    <html>
    poj3073
    poj 2482 Stars in Your Window (线段树扫描线)
  • 原文地址:https://www.cnblogs.com/chmm/p/7423535.html
Copyright © 2011-2022 走看看