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};
double c1 = func(side);
double c2 = func(lens[2]);
double c3 = func(rd);
double c4 = func(*pd);
double c5 = func(edge);
double c6 = func(7.0);
std::cout<<"c5:"<<c5<<std::endl;
std::cout<<"c6:"<<c6<<std::endl;
return 0;
}