如果引用变量是const,则编译器将在以下两种情况下生成临时变量:
1.实参的类型正确,但不是左值。
2.实参的类型不正确,但可以转换成正确的类型。
左值参数是指可被引用的数据对象,如变量、数组元素、结构成员等等,非左值包括字面常量和包含多项的表达式。
double refcube(const double &ra){ return ra*ra*ra;}
考虑下面的代码:
long edge=5L;
double side=3.0;
double c5=refcube(edge);//实参的类型不正确
double c6=refcube(7.0);//实参的类型正确,但是非左值。
double c7=refcube(side+10.0);//实参为包含多项的表达式。
在这些情况下,编译器都将生成一个临时匿名变量,将函数调用的参数的值传递给该匿名变量,并让ra指向它,这些临时变量只在函数调用期间存在,此后编译器便将其删除。
应尽可能地使用const:
1.使用const可以避免无意中修改数据的编程错误。
2.使用const使函数可以处理const和非const实参,否则将只能接收非const数据。
3.使用const引用能使函数能正确生成并使用临时变量。