C++ 之返回类型和return 语句常见的误解

1 当函数中存在两个return 语句

double Lateral::computecontrol(double x,double y,double err,double speed,double dt){
    double ls_factor = ls_factor_(42);
    cout<< "ls_factor = "<< ls_factor <<endl;

    double target_steer = pid.calculatesteer(x,y);

    if (true)
    {
        double torque = pid.calculate(err,speed,dt);
        return torque;   //此时函数只会执行第一个return 
    }
   //下面语句将不会被执行
    cout<<"init ok"<<endl;
    return target_steer;  //第二个return 语句不会执行
}

2  return 语句的两种类型

return语句终止当前正在执行的函数并将控制权返回到调用该函数的地方。return语句有两种形式:

  return;

  return expression;

  1、无返回值函数

  没有返回值的return语句只能在返回类型是void的函数中。返回void函数不要求非得有return语句,因为这类函数后面会隐含地执行return。

  通常情况下,void函数如果想在它中间位置提前退出,可以使用return语句。

  一个返回类型是void的函数也能使用return语句的第二种形式,不过此时return语句的expression必须是另一个返回void的函数。

  2、有返回值函数

  return语句的第二种形式提供了函数的结果。只要函数的返回类型不是void,则该函数内的每条return语句必须返回一个值。return语句返回值的类型必须与函数的返回类型相同,或者能隐式地转换成函数的返回类型。

  在含有return语句的循环后面也应该有一条return语句,如果没有的话该程序就是错误的。

补充: 

return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。 如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况。

子程序函数返回主调函数,宣告函数的一次执行结束,在调用期间所分配的变量单元被撤消。送函数值到调用表达式中,当然这一点并不是必需的,因为有些函数有返回值,有些函数没有返回值。

void LookupTable::seachIndex(const std::vector<double>&vec,const double x, int &min_id, int &max_id){
    int i = 0;
    int j = vec.size() - 1;
    int mid = 0;
    //二分查找法
    while (i <= j)
    {
        mid = (i + j) / 2;
        if (x > vec[mid])
        {
            i = mid + 1;
        }
        if (x < vec[mid])
        {
            j = mid - 1;
        }
        if (x == vec[mid])
        {
            min_id = mid;
            max_id = mid;
        std::cout<<" min_id1 "<< min_id <<std::endl;
        std::cout<<" max_id1 "<< max_id <<std::endl;
            return;  //此处,如果满足i<=j,将执行二分法查找到目标索引号后,即退出,不在执行下面语句
        }
    }
//如果不满足i<=j,则执行下述语句。
        std::cout<<" into "<<std::endl;
        min_id = std::max(j,0);
        max_id = std::min(i,(int)vec.size()- 1);
        std::cout<<" min_id2 "<< min_id <<std::endl;
        std::cout<<" max_id2 "<< max_id <<std::endl;
        
    }

部分定义参考博主:https://www.cnblogs.com/daisy-996/p/10244819.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值