• 练习2.36、2.37、2.38


    2.36:关于下面的代码,请指出每一个变量的类型以及程序结束时它们各自的值。

    int a=3,b=4;

    decltype(a) c=a;  //c是int类型的变量

    decltype((b)) d=a;  //d是int&类型的变量  

    ++c;    //c=4

    ++d;    //d=4,a=4

    2.37:赋值是会产生引用的一类典型表达式,引用的类型就是左值的类型。也就是说,如果 i 是int,则表达式 i =x的类型是int&。根据这一特点,请指出下面代码中每一个变量的类型和值。

    int a=3,b=4;

    decltype(a) c=a;  //c是int类型的变量,其值为3

    decltype(a=b) d=a;  //d是int&的引用,d的值即a的值为3

    2.38:说明由decltype指定类型和由auto指定的类型有何区别。请举出一个例子,decltype指定的类型与auto指定的类型一样;再举一个例子,decltype指定的类型与auto指定的类型不一样。

    auto指定的类型是根据表达式的类型判断其变量的类型,并将表达式的值初始化该变量,(编译器通过计算变量的值来判断其类型)其对顶层const对象直接忽略,只关心底层const对象。

    decltype指定的类型是根据选择并返回其操作数的结果作为其变量类型(分析表达式,并得到它的类型),没有实际计算表达式的值,其与auto不同,它同样关注顶层const对象,也关心底层const对象,而且如果表达式是赋值左值表达式的特殊表达式,其返回的结果则是引用,并且其类型就是左值类型。

    两者相同:

    1 int i=0;
    2 auto a=i;
    3 decltype(i) a=0;

    两者不同:

    1 const int i=0,&r=i;
    2 auto a=i;    //int类型
    3 auto ar=r;    //int类型
    4 decltype(i) d=0;    //const int 类型
    5 decltype(r+0) dr=0;//int类型

      

  • 相关阅读:
    armlinuxgnueabihf、aarch64linuxgnu等ARM交叉编译GCC的区别
    《JAVA与模式》之简单工厂模式
    wget常用命令
    sublime text添加Jquery插件
    e = e || window.event用法细节讨论
    配置运行 Compilify.net
    [翻译].NET中的Command(命令)模式
    EF Code First 中使用Jarek Kowalski's Provider的方法1
    WF实例学习笔记:(1)准备工作
    Entity Framework Code First Caching
  • 原文地址:https://www.cnblogs.com/Dark-King/p/9372068.html
Copyright © 2020-2023  润新知