C++ primer之第二章

阅读至2.5.2时,发现一个不知道的知识点:
           如果某个类型的别名指代的是复合类型或是常量,那么它用到声明语句里面就会产生意想不到的后果,例如下面的声明语句用到了类型pstring,它实际上是类型char*的别名:
        
typedef char* pstring;   1
const pstring cstr = 0; //cstr是指向char的常量指针
const pstring* ps; //ps是一个指针,指向char的常量指针。
const char * cstr = 0;  2
区别:
2是说定义了一个指针cstr,而该指针指向的char对象是const类型,即指向常量的指针。
1是说定义了一个指针cstr,该指针指向pstring类型,因为const与类型结合是:const与类型的顺序没有规定,可对比 const int i;  (i是个常量),所以const修饰的是cstr,又因为pstring是个指针类型,所有cstr是pstring类型(指向char)的常量指针,

关于auto
        auto一般会忽略顶层const,而用const修饰的auto后,该对象的初始值便是const如2;
      int i = 0, &r = i;
    auto a = r;  //a 是int类型
1
    const int ci = i, &cr = ci;
    auto b = ci; // b is an int (top-level const in ci is dropped)
    auto c = cr; // c is an int
    auto d = &i; // d is an int*
    auto e = &ci; // e is an int*
2
    const auto f = ci; //  f is a const int
    auto & g = ci;      //  ci is const int

typeid:返回当前变量所属类型的名。
decltype((variable))注意是双层括号,这样的结果永远是引用,而得出了decltype(variable)当里面的值是引用是,结果才是引用。
auto是通过初始值来推断变量类型的,而decltype是从变量或者表达式来推断类型的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值