C++14学习笔记(2)——函数返回类型推导

本文介绍了C++14中的一种新特性——函数返回类型推导。虽然不能使用auto作为函数形参,但可以通过后置返回类型推导实现。在C++11及更高版本中,当函数有多条return语句时,所有返回类型必须一致。对于包含递归调用的函数,递归调用需置于首个return之后,以确保编译器能正确推导返回类型。此功能在VC2015中得到支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一篇学习笔记中提到了Lambda表达式可以使用auto形参和返回类型,但普通函数不能使用auto形参。

虽然普通函数不能使用auto形参,但可以使用返回类型推导。在C++11中我们可以使用后置返回类型推导来完成这件事情:

//代码2.1
//C++11中使用后置返回类型推导
auto add(int x, int y) ->decltype(x + y)
{
	return x + y;
}
而在C++14中,我们可以省略decltype,编译器直接由return语句的值推导出返回类型:

//代码2.2
//C++14中不需要后置decltype
auto add(int x, int y)
{
	return x + y;
}

如果有多条return语句,则它们的返回类型必须相同,否则编译器报错:

//代码2.3
auto PI(bool fract)
{
	if (fract) return 3.1416;
	else return 3;		//错误:推导出来的int与之前推导出来的double冲突
}

对于含有递归调用的函数,递归调用必须在第一个return之后,否则编译器在递归调用时还不知道返回类型:

//代码2.4
auto Fibonacci(int n)
{
	//错误:Fibonacci的返回类型尚未定义
	if (n >= 2) return Fibonacci(n - 1) + Fibonacci(n - 2);
	if (n == 1) return 1;
	return 0;
}
正确的代码为:

//代码2.5
auto Fibonacci(int n)
{
	if (n <= 0) return 0;
	if (n == 1) return 1;
	//Fibonacci的返回类型为int
	return Fibonacci(n - 1) + Fibonacci(n - 2);
}


以上特性VC2015支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值