C11新特性一 —— 类型推导

类型推导

1. auto

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

(1) auto的使用必须马上初始化,否则无法推导出类型

(2) auto在一行定义多个变量时,各个变量的推导不能产生二义性,否则编译失败

(3) auto不能用作函数参数

(4) 在类中auto不能用作非静态成员变量

(5) auto不能定义数组,可以定义指针

(6) auto无法推导出模板参数

(7) 在不声明为引用或者指针时,auto会忽略等号右边的引用类型和cv限定

(8) 在声明为引用或者指针时,auto会保留等号右边的引用和cv属性

2. decltype

decltype用于推导表达式类型,这里只用于编译器分析表达式的类型,表达式实际不会进行运算

decltype不会像auto一样忽略引用和cv属性,decltype会保留表达式的引用和cv属性

对于decltype(exp)有:

  • exp是表达式,decltype(exp)和exp类型相同
  • exp是函数调用,decltype(exp)和函数返回值类型相同
  • 其他情况,若exp是左值,decltype(exp) 是exp类型的左值引用

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
发出的红包

打赏作者

L☆★

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值