zoukankan      html  css  js  c++  java
  • 练习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类型

      

  • 相关阅读:
    Java vs Python
    Compiled Language vs Scripting Language
    445. Add Two Numbers II
    213. House Robber II
    198. House Robber
    276. Paint Fence
    77. Combinations
    54. Spiral Matrix
    82. Remove Duplicates from Sorted List II
    80. Remove Duplicates from Sorted Array II
  • 原文地址:https://www.cnblogs.com/Dark-King/p/9372068.html
Copyright © 2011-2022 走看看