c++primer之函数(返回类型和return语句)

本文详细解析了C++中的return语句用法,包括无返回值和有返回值的函数,以及如何正确地返回值而不引发内存问题。此外,还介绍了返回数组指针的方法。
  • return语句终止当前正在执行的函数,并将控制权返回到调用该函数的地方。
 return语句有两种形式:
         return;
         return expression;

无返回值函数

  • 没有返回值的return语句只能用在返回类型是void的函数中,返回void的函数不要求非得有return语句,因为在这类函数函数最后一句后面会隐式的执行return。
  • 通常情况下,void函数如果想在它的中间位置提前退出,可以使用return语句,return的这种用法有点像我们的break语句退出循环。

    有返回值函数

  • return语句的第二种形式提供了函数的结果。只要函数的返回类型不是void,则该函数内的每条return语句必须返回一个值。return语句返回值的类型必须与函数的返回值类型相同,或者能隐式的转换成函数的返回类型。
例:
bool str_subrange(const string &str1, const string &str2)
{
   auto size = (str1.size() < str2.size()) ? str1.size() : str2.size();
   for(decltype(size) i=0; i!=size; ++i)
       if(str1[i] != str2[i])
               return 0;
   return 1;  //在含有return语句的循环后面应该也有一条return语句
}

值是如何被返回的

  • 返回一个值的方式和初始化一个变量或形参的方式完全一样;返回的值用于初始化调用点的一个临时量,该临时量就是函数调用的结果。

不要返回局部对象的引用或指针

  • 函数完成后,它所占用的存储空间也随之被释放掉。因此,函数终止意味着局部变量的引用将指向不在有效的内存区域。
  • 返回局部对象的引用时错误的;同样返回局部对象的指针也是错误的,一旦函数完成,局部对象被释放,指针将指向一个不存在的对象。
//  严重错误,这个函数试图返回局部对象的引用。
const string &manip()
{
    string ret;
    if(!ret.empty())
         return ret;  // 错误;返回的局部对象的引用
     else
         return "Empty";  // 错误;”Empty“是一个局部的临时量
}

返回数组指针
- 因为数组不能拷贝,所以函数不能返回数组。 不过函数可以返回数组的指针或引用。

声明一个返回函数指针的函数
我们想定义一个返回数组指针的函数,则数组的维度必须跟在函数的名字之后,然而,函数的形参列表也跟在函数名字后面且形参列表应该先于数组的维度。

返回数组指针的函数形式如下所示:
    Type (*functon(parameter_list)) [dimension]
    // 类似于其他数组的声明,Type表示元素的类型,dimension表示数组的大小。
// c++11新标准定义方式: auto func(int i) -> int(*)[10];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MachineLP

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

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

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

打赏作者

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

抵扣说明:

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

余额充值