首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++11新语法糖之尾置返回类型

C++11新语法糖之尾置返回类型

作者头像
racaljk
发布2018-08-31 11:14:57
1.1K0
发布2018-08-31 11:14:57
举报
文章被收录于专栏:racaljkracaljkracaljk

C++11的尾置返回类型初衷是为了方便复杂函数的声明和定义,但是当复杂度稍微提升一些的时候很明显能注意到这种设计的作用微乎其微.

首先考虑如下代码:

C++

//返回指向数组的指针
auto func1(int arr[][3], int n) -> int(*)[3] {
    return &arr[n];
}

这段代码非常符合尾置返回类型设计的用途,按照以往的方式我们可能需要:

C++

int (* func1(int arr[][3], int n))[3] {
    return &arr[n];
}

这样看似乎这个新特性非常的方便,但是当函数复杂度稍微提升,情况完全不一样.假设我们要定义一个返回指向func1函数的指针的函数:

C++

//原版本:
int(*(*func2())(int arr[][3], int n))[3]{
    return func1;
}
//使用新特性的版本
auto func2() ->  int (*(*)(int arr[][3], int n))[3] {
    return func1;
}

很明显这里尾置返回类型基本上没有什么方便。当函数复杂度进一步提升时,这种语法糖的味道完全已经消失,接下来只有各凭本事:

C++

//函数接受一个指向func1函数的指针的参数,返回指向func2的函数的指针;
auto func3(int(*(*ptf)(int arr[][3], int n))[3]) -> int (*(*(*)())(int arr[][3], int n))[3]{
    ...
}

写到这里似乎可以做出一些总结性的言论,尾置返回类型只适用于简单的函数声明/定义,因为复杂度的提升会完全掩盖语法糖的作用,这时更应该考虑decltype.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-11-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档