c++编程中如果出现把一个函数的返回值、强行转化后的对象 作为函数的参数传进去时,编译器会报错的情况。这时候就该注意了,你需要把该函数的参数类型前加上const修饰。
原因在于c++的左值和右值有所区别:
c++中每一个表达式都会产生一个左值和右值。比如a=3。a就是一个左值,3就是一个右值。左值可以作为右值,但右值不能作为左值。比如:3=b;就不是正确的。
那么怎么分辨左值和右值呢?
一般来说,左值的地址对程序员是开放的,比如定义的变量或对象我们可以用 &加变量名或对象名 将它的地址取出来。
但是一个右值 比如存放函数返回值的临时变量、被强制类型转换的对象(也会产生一个临时对象,注意是自定义类型不是基本类型,基本类型的右值不能被const或volatile修饰,也不能被修改),
我们不知道它具体叫什么名字,所以它的地址对程序员是不开放的,那么他就是一个右值。
对于右值来说有这样两点需要注意:
1.(自定义类型的)右值可以使用他的成员函数改变自己的数据成员。
2.(自定义类型的)右值只能被const类型的引用所引用,所以说传进右值的函数的形参要声明为const的,不然编译会出错。
不过这种东西还真是不方便呢,不过如果不嫌麻烦,可以再创建一个和临时对象类型一致的对象把临时对象接过来,使用新的左值就可以正常调用函数了,当然你把函数的形参类型声明为const也是极好的。