首页 > Note > C++11: 返回值类型后置语法

C++11: 返回值类型后置语法

2019年6月19日 发表评论 阅读评论

今天在看 cpprestsdk 的源码的时候发现一个方法的定义是这样的:

语法为:

我们知道 C++11 的 lambda 表达式可以使用 -> 指定返回参数的类型, 没想到声明方法也可以这么用。这种写法和传统的方法有什么区别呢?

在泛型编程中,一个常见的例子如下:

如果 ab 的类型不同,需要怎么写呢?

我们在调用此方法时必须显示指定 R 的类型,  或者使用 decltype 运算符推导返回值类型。如果让调用的方式简单点呢?把返回值类型放到定义中去, 像这样:

然而这么写是编译不过的。因为 a, b 在参数列表中,编译器解析返回值的时候,它们还没有定义。那么我们可以这样写:

不过这太晦涩了。

C++ 11 允许将返回值类型后置,前面使用 auto 占位:


后置返回值类型使得编码更方便优雅。而下面这种用法 ,可以完成 C++98/03 无法完成的任务。

总之: 返回值类型后置可以解决返回值类型需要依赖参数类型而无法确定的问题