类型说明符 auto & 类型指示符 decltype

类型说明符 auto & 类型指示符 decltype

#include <iostream>
using namespace std;
/**
auto
    1,类型说明符,让编译器自己去分析,通过初始值来推算变量的类型;
    2.因此他的定义必须要有初始值
    3.可以一行里定义多个变量,用逗号隔开。当然这些变量的类型必须一致
    4.用引用变量去推断auto的类型时,会将引用的那个对象的类型作为auto的类型
    5.auto会忽略掉顶层const.想要让他加上顶层的const,在aout的时候就加上
    6.然鹅让人难受的是如果你用auto声明一个引用,他又会保持原变量的所有定义的类型
decltype:
    1.有时候我们希望从一个变量推断出要定义的类型,但不想用这个变量来初始化这个要定义的变量,就用decltype
    2.这时decltype他只单纯的判断其类型,并不会计算表达式的值,且貌似无法在判断类型前修改其表达式里变量的值
    3,decltype在引用和const里他会全盘接受(完完全全和里面的变量,表达式的类型一样)
*/
auto a=1, b=a,*c=&a;
//auto d=1,e=1.1;//错误,必须是同一个类型

decltype(a++) ad=10,bd=ad,*cd=&ad;
//decltype(f()) wuliao;//并不运行函数,只推出函数的返回值

int &dd=a;
int const *const fd=&a;
decltype(dd) ed=b;//ed是一个引用必须给他赋初值
decltype(fd) gd=&a;//gd是一个int const *const
decltype(dd+1) hd=4;//虽然dd是一个引用,但是dd+1表达式是一个int型,所以hd是一个int
decltype(*cd) kd=a;//你以为你解引用了一个int,但他却是一个引用(int &)....
decltype((a)) id=a;//这个操作真是叫人窒息,多加一个括号就成引用了。和下面那个一样了,相当于强制给他搞了一个引用
decltype(a) &jd=a;

int main(void)
{

    cout<<a<<endl;
44444//
    const int &g=a;
    auto f=g;
 5555///
    const int * const h=&a;
    const int h2=3;
    auto j=h;
    auto j2=h2;
    /**
    按理来说,这里j推测的类型应该是和h一样
    是const int *const,然而他掉了顶层const
    想要让j达到和h一样的类型,在前面再加一个const
    */
    j+=1;
//    *j+=1;
    j2++;

    const auto j3=h;
//    j3+=1;
//    *j3+=1;
//6666666666//
    auto &k=h;
//    h++;
//    *h+=1;
/

    cout<<"qwe"<<endl;

	return 0;
}
/*初次看到有大佬在C++里用auto还以为是c99里的自动
现在才知道这个用法 已经被删除了。。。
变成了上面的那个用法。。。。
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值