C++11新特性——decltype

系列文章目录

C++11新特性大全+实例

前言

C++ 这门编程语言的历史可以追溯至 1979 年,当时的 Bjarne Stroustrup(C++ 之父,后续简称 Stroustrup)还在使用 Simula 语言进行开发工作。

1998 年,C++ 标准委员会发布了第一版 C++ 标准,并将其命名为 C++ 98 标准。据不知名人士透露,《带注释的C++参考手册》这本书对 C++ 98 标准的制定产生了很大的影响。

经过作者的不断迭代,一本书往往会先后发布很多个版本,其中每个新版本都是对前一个版本的修正和更新。C++ 编程语言的发展也是如此。截止到目前(2020 年),C++ 的发展历经了以下 3 个个标准:

2011 年,新的 C++ 11 标准诞生,用于取代 C++ 98 标准。

2014 年,C++ 14 标准发布,该标准库对 C++ 11 标准库做了更优的修改和更新;

2017 年底,C++ 17 标准正式颁布;

虽然学习 C++11 需要花些时间,但这是非常值得的;C++11 非常实用,它不但提高了开发效率,还让程序更加健壮和优雅。程序员应该乐于升级换代已有的知识,而学习和使用 C++11 早就是大势所趋。

|版本声明:山河君,未经博主允许,禁止转载

decltype关键字

1.decltypde类型推演

decltype与auto关键字一样,用于进行编译时类型推导。

但与auto不同的是:decltype的类型推导并不是像auto一样是从变量声明的初始化表达式获得变量的类型,decltype总是以一个普通的表达式为参数,返回改表达式的类型。

例如:

int x = 1;
decltype(x) y = x;

这段代码的意思是推测出x的类型, 定义变量y,将x的值赋给y,decltype(x)就相当于int;

2.与auto的不同

但是熟悉auto的童鞋都知道,我们完全可以这样写auto x = y就可以了。

这就引伸到decltype和auto不同的地方,auto定义变量类型必须是明确的,它是通过右值来找到自身的变量类型,而decltype则不一样,decltype推演的时候变量类型都是已经确定的,例如:

int fun()
{
}

int main(int argv, char* argc[])
{
    decltype(fun) x;
}

实际上fun的返回值类型作为了decltype推演出的类型。

3.与auto结合使用

在C++11中auto不仅不能作为参数定义变量,也不能作为函数返回值,但是这一情况在C++14中改变了,auto可以作为函数返回值。那么在C++11中auto结合decltype可以使得函数返回值能够在编译时期进行推演。 这么做的原因是为了泛型编程的返回值,或者说C++11大多新的特性都是为了泛型编程。

假如我们有以下模板函数:

template<typename T, typename U>
auto add(T i, U j)
{
    auto x = i + j;
    return x;
}

这在C++14是可以的,但是在C++11中是报错的,我们在不知道i+j结果为什么类型,或者说模板函数中不知道返回什么类型的时候要怎么做呢?

C++11中出现了新的用法:拖尾返回类型、auto 与 decltype 配合
以上就可以写成

template<typename T, typename U>
auto add(T i, U j)->decltype(i + j)
{
    auto x = i + j;
    return x;
}

总结

仍在持续更新中~
如果对您有所帮助,请点个赞!

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值