c++左值和右值
c++编程中如果出现把一个函数的返回值、强行转化后的对象 作为函数的参数传进去时,编译器会报错的情况。这时候就该注意了,你需要把该函数的参数类型前加上const修饰。
原因在于c++的左值和右值有所区别:
c++中每一个表达式都会产生一个左值和右值。比如a=3。a就是一个左值,3就是一个右值。左值可以作为右值,但右值不能作为左值。比如:3=b;就不是正确的。
那么怎么分辨左值和右值呢?
一般来说,左值的地址对程序员是开放的,比如定义的变量或对象我们可以用 &加变量名或对象名 将它的地址取出来。
但是一个右值 比如存放函数返回值的临时变量、被强制类型转换的对象(也会产生一个临时对象,注意是自定义类型不是基本类型,基本类型的右值不能被const或volatile修饰,也不能被修改),
我们不知道它具体叫什么名字,所以它的地址对程序员是不开放的,那么他就是一个右值。
对于右值来说有这样两点需要注意:
1.(自定义类型的)右值可以使用他的成员函数改变自己的数据成员。
2.(自定义类型的)右值只能被const类型的引用所引用,所以说传进右值的函数的形参要声明为const的,不然编译会出错。
不过这种东西还真是不方便呢,不过如果不嫌麻烦,可以再创建一个和临时对象类型一致的对象把临时对象接过来,使用新的左值就可以正常调用函数了,当然你把函数的形参类型声明为const也是极好的。
c++左值和右值的更多相关文章
- c++ 左值 和 右值
什么是lvalue, 什么是rvalue? lvalue: 具有存储性质的对象,即lvalue对象,是指要实际占用内存空间.有内存地址的那些实体对象,例如:变量(variables).函数.函数指针等 ...
- C++中的左值与右值(二)
以前以为自己把左值和右值已经弄清楚了,果然发现自己还是太年轻了,下面的这些东西是自己通过在网上拾人牙慧,加上自己的理解写的. 1. 2. 怎么区分左值和右值:知乎大神@顾露的回答. 3. 我们不能直接 ...
- C++中的左值和右值
左值和右值的定义 在C++中,能够放到赋值操作符=左边的是左值,能够放到赋值操作符右边的是右值.有些变量既能够当左值又能够当右值.进一步来讲,左值为Lvalue,事实上L代表Location,表示在内 ...
- C++11 左值与右值
概念 左值:表达式结束后依然存在的对象 右值:表达式结束后就不存在的临时对象 2.如何判断左值和右值 能不能对表达式取地址,如果能,就是左值,否则就是右值 3.对下面的语句进行区分 int a = 3 ...
- c++ 11 移动语义、std::move 左值、右值、将亡值、纯右值、右值引用
为什么要用移动语义 先看看下面的代码 // rvalue_reference.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #includ ...
- C++ 11 左值,右值,左值引用,右值引用,std::move, std::foward
这篇文章要介绍的内容和标题一致,关于C++ 11中的这几个特性网上介绍的文章很多,看了一些之后想把几个比较关键的点总结记录一下,文章比较长.给出了很多代码示例,都是编译运行测试过的,希望能用这些帮助理 ...
- C++11 左值、右值、右值引用详解
C++11 左值.右值.右值引用详解 左值.右值 在C++11中所有的值必属于左值.右值两者之一,右值又可以细分为纯右值.将亡值. 在C++11中可以取地址的.有名字的就是左值,反之,不能取地址的.没 ...
- C++11 左值、右值、右值引用
左值.右值 在C++11中所有的值必属于左值.右值两者之一,右值又可以细分为纯右值.将亡值.在C++11中可以取地址的.有名字的就是左值,反之,不能取地址的.没有名字的就是右值(将亡值或纯右值).举个 ...
- C++ 左值与右值 右值引用 引用折叠 => 完美转发
左值与右值 什么是左值?什么是右值? 在C++里没有明确定义.看了几个版本,有名字的是左值,没名字的是右值.能被&取地址的是左值,不能被&取地址的是右值.而且左值与右值可以发生转换. ...
随机推荐
- 可爱的Python_课后习题_CDay−4 可用的首个Python 脚本
读取文件cdays−4-test.txt 内容,去除空行和注释行后,以行为单位进行排序,并将结果输出为cdays−4-result.txt. cdays−4-test.txt的内容 #some wor ...
- oracle客户端安装配置 tnsnames.ora文件
Oracle客户端tnsnames.ora连接配置 Oracle90的在C:\Oracle\ora90\network\ADMIN下面 Oracel10g的在D:\oracle\product\10. ...
- APP开发:一个APP开发需要哪些技术人员?
亿合科技小编了解到:国民老公王思聪曾经在一个访谈中谈到过,如果他是一个普通人,他会选择移动互联网去创业,因为做个网站或者App开发门槛较低,做大做强的机会也比较多.小编觉得创业就是投资,重 ...
- Asp.net MVC5 框架揭秘 S412 实例解析 – 绝妙的扩展 模式的胜利
Asp.net MVC5 框架是个 开源的,处处可扩展的框架. 蒋先生 在他的这本书里 对如何理解框架,如何扩展框架, 给出了大量的说明和实例. 先上效果图 大部分做传统BS 的同学看到这个页面,脑海 ...
- font-family:“微软雅黑” OR font-family:Microsoft Yahei
sublime对中文编码支持的不好,可以考虑用后者.
- 关于ibatis中mysql的@变量问题作用域、污染问题
搞了1天,过程不想多说,结论如下: ibatis.net 是有连接池的,用ab.exe 并发测试,可以测出默认的max连接数 ibatis.net的数据操作 xml 中可以用@变量,也就是 Sessi ...
- HBase完全分布模式安装
假设Hadoop已经成功安装. 实验环境如下: centos 6.4 hadoop-0.20.2 hbase-0.90.5 用户名root hadoop安装目录:/root/bin/had ...
- python27 + windows7 报错 No module named requests
1.下载插件包 地址: http://www.lfd.uci.edu/~gohlke/pythonlibs/#distribute 包名: requests-2.12.4-py2.py3-none-a ...
- svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录
svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录 Windows下,svn服务器IP本来是内网一台服务器上 ...
- svn版本搭建
安装步骤如下: 1.yum install subversion 2.输入rpm -ql subversion查看安装位置,如下图: 我们知道svn在bin目录下生成了几个二进制文件. 输入 ...