C++ 新特性之类型推导

C++11引入的auto和decltype关键词简化了类型推导,auto用于自动推导变量类型,decltype则用于在不定义变量时获取表达式类型。它们在编译期推导类型,但有使用限制,如不能作为函数参数或定义数组。
摘要由CSDN通过智能技术生成

        C++11引入了auto和decltype关键字,使用他们可以在编译期就推导出变量或者表达式的类型,方便开发者编码也简化了代码。

一、auto

auto可以让编译器在编译器就推导出变量的类型;

auto的基本用法:可以通过等号右边的类型推导出变量的类型;

auto推导注意事项:

  1. auto的使用必须马上初始化,否则无法推导出类型;
  2. auto在一行定义多个变量时,各个变量的推导不能产生二义性,否则编译失败;
  3. auto不能用作函数参数;
  4. 在类中auto不能用作非静态成员变量;
  5. auto不能定义数组,可以定义指针;
  6. auto无法推导出模板参数;

  • 当变量不是指针或者引用类型时,推导的结果中不会保留 constvolatile 关键字
  • 当变量指针或者引用类型时,推导的结果中会保留 constvolatile 关键字

二、decltype

        在某些情况下,不需要或者不能定义变量,但是希望得到某种类型,这时候就可以使用decltype关键字,它的作用是在编译器编译的时候推导出一个表达式的类型;decltype 的推导是在编译期完成的,它只是用于表达式类型的推导,并不会计算表达式的值。

decltype推导规则:

对于decltype(exp):

  • exp是表达式,decltype(exp)和exp类型相同
  • exp是函数调用,decltype(exp)和函数返回值类型相同
  • 其它情况,若exp是左值,decltype(exp)是exp类型的左值引用
int a = 0, b = 0;
decltype(a + b) c = 0;         // c是int,因为(a+b)返回一个右值
decltype(a += b) d = c;        // d是int&,因为(a+=b)返回一个左值

三、auto和decltype结合使用

        返回类型后置的配合使用:返回值后置类型语法就是为了解决函数返回制类型依赖于参数但却难以确定返回值类型的问题。

template <typename T, typename U>
auto add(T t, U u) -> decltype(t + u)
{
    return t + u;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值