C++,创建临时变量传递给参数为常量的函数,lvalue与rvalue的转换。
在开始之前,先来看一个例子
void func(const int& a);
int main()
{
int b=1;
func(b*2); //正常运行
func(2); //报错
}
首先,注意到func函数的声明中的参数是一个const int& 类型的变量,也就是一个常量引用。但是,`b*2` 表面上看应该不具有任何地址,如果进行传址调用的话,应该会报错,因为 `b*2` 是一个常量,具有地址的应该是`b`, 如果这样理解的话,b*2实际上进行的是传值调用,与 & 传地址符号相矛盾。
实际上,在调用func(b*2)的时候,创建了一个临时的int型的变量储存在内存中(属于右值),当func(b*2)调用完毕,也就是函数执行结束的时候,这一个临时变量会被销毁。因此,func(b*2) 是一个传址调用。有一点需要注意的是,如果函数func的声明改为
void func(int& a);
那么,func(b*2)这一个语句将会立即报错,因为创建出来的临时变量只能为
共有 0 条评论