第十七讲 开始编写代码前的设计—————面向对象高级开发

本文探讨了C++中函数参数和返回值类型的选择,特别是关于引用(&)和const引用的使用。文章通过实例展示了如何处理左值和右值,说明了为何&参数不能接受右值而const&可以。同时,讨论了函数返回值为引用的情况及其限制,帮助读者理解何时应该使用const关键字来确保函数不修改传入对象的值。
摘要由CSDN通过智能技术生成

1 开始编写代码前的设计

  • 1,考虑传入的参数时否可以是&(左值),是否用const(不会修改传入的值);
    • 传入&类型参数:只能是左值
    • 传入const &类型参数:可是左值或者右值(临时对象)
    • &类型参数不能是右值的原因:传&的意图是改变对象值,但是传递右值时,编译器会生成一个临时匿名对象,让&类型参数指向它(这些临时匿名对象只会在函数调用期间存在,随后编译器便将它删除),因此不能做到更改值的意图,C++为了阻止这种情况发生,便在这种情况下禁止创建临时变量;
    • const &类型参数可以是右值的原因:const &本就意味着不会对对象造成更改,因此C++会为其创建临时匿名对象(只在函数调用期间存在)
  • 2,考虑返回的类型是否是&(对象要不是loacl object【局部对象】),函数类型是否用const(函数不改变类成员变量值)
#include <iostream>
#include <cstdlib>

double func(const double& ra)

{
    return ra*ra;
}

double  func2(double& ra){
    return  ra*ra;
}


int main(){
    //左值
    double side = 3.0;
    double* pd = &side;
    double& rd = side;
    //右值
    long edge = 5L;
    double lens[4]={2.3,3.4,4.5,6.7};

    //const&类型
    //左值参数
    double c1 = func(side); // ra 是side
    double c2 = func(lens[2]); // ra是lens[2]
    double c3 = func(rd);  // ra 是 rd
    double c4 = func(*pd); // ra 是*pd
    //右值参数
    double c5 = func(edge); // ra 是临时变量(double引用不能指向long)
    double c6 = func(7.0); // ra 是临时变量
    std::cout<<"c5:"<<c5<<std::endl;//c5:25
    std::cout<<"c6:"<<c6<<std::endl;//c6:49

    //&类型
    //右值参数(报错)
    //double d1 = func2(2.0);
     // double d2 = func2(edge);

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

繁星蓝雨

如果觉得文章不错,可以请喝咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值