c++左值和右值

c++编程中如果出现把一个函数的返回值、强行转化后的对象 作为函数的参数传进去时,编译器会报错的情况。这时候就该注意了,你需要把该函数的参数类型前加上const修饰。

原因在于c++的左值和右值有所区别:

c++中每一个表达式都会产生一个左值和右值。比如a=3。a就是一个左值,3就是一个右值。左值可以作为右值,但右值不能作为左值。比如:3=b;就不是正确的。

那么怎么分辨左值和右值呢?

一般来说,左值的地址对程序员是开放的,比如定义的变量或对象我们可以用 &加变量名或对象名 将它的地址取出来。

但是一个右值 比如存放函数返回值的临时变量、被强制类型转换的对象(也会产生一个临时对象,注意是自定义类型不是基本类型,基本类型的右值不能被const或volatile修饰,也不能被修改),

我们不知道它具体叫什么名字,所以它的地址对程序员是不开放的,那么他就是一个右值。

对于右值来说有这样两点需要注意:

1.(自定义类型的)右值可以使用他的成员函数改变自己的数据成员。

2.(自定义类型的)右值只能被const类型的引用所引用,所以说传进右值的函数的形参要声明为const的,不然编译会出错。

不过这种东西还真是不方便呢,不过如果不嫌麻烦,可以再创建一个和临时对象类型一致的对象把临时对象接过来,使用新的左值就可以正常调用函数了,当然你把函数的形参类型声明为const也是极好的。

上一篇:ASP.NET MVC应用迁移到ASP.NET Core及其异同简介


下一篇:ASP.NET Core - Razor 页面简介