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了!

  • 相关阅读:
    POJ 1611
    [Erlang24]使用zotonic搭建网站记录
    [Erlang23]怎么有效的遍历ETS表?
    [Erlang22]如何按规则位数输出数字
    [Git00] Pro Git 一二章读书笔记
    十分钟用HTML&CSS让博客园变得高大上
    [Erlang21]Erlang性能分析工具eprof fporf的应用
    [Erlang20]一起攻克Binary
    [Erlang19]Erlang的config文件读取效率问题
    [Erlang18]教练!又发现Erlang Shell里面的神奇函数一只
  • 原文地址:https://www.cnblogs.com/chmm/p/7423535.html
Copyright © 2011-2022 走看看