先谈容易的知识点 区别两个 1、 i++ 返回原来的值,++i 返回加1后的值。 2、 i++ 不能作为左值,而++i 可以。 重点说下第二点。首先解释下什么是左值 左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。 左值与右值的根本区别在于是否允许取地址&运算符获 ...
分类:
其他好文 时间:
2017-10-06 00:02:57
阅读次数:
243
2.3.1引用 在C++11标准中,增加了一个右值引用,稍微高级的东西,以后会更新。 一般来说引用都是说的左值引用。 这里就有一个问题,什么是左值,什么是右值。 简单一句话:左值长久,右值短暂 引用其实就是给对象起了另一个名字。 如: int ival = 0; int &refVal = val; ...
分类:
其他好文 时间:
2017-10-01 16:20:20
阅读次数:
205
1. auto自动变量 2. array类 3. C++11新增了另一种引用,右值引用,是使用&&声明的: ...
分类:
编程语言 时间:
2017-09-29 17:50:24
阅读次数:
159
为什么赋值操作符函数的参数为const引用,返回值为引用 1、返回值类型 返回类型一般声明为类型的引用,并在函数结尾时返回实例自身的引用(即*this)。这里主要有两个原因:(1)返回引用可以减少一次拷贝构造和析构函数导致不必要的开销,因为返回值类型不是引用,会创建一个匿名对象,这个匿名对象时个右值 ...
分类:
其他好文 时间:
2017-09-23 12:32:48
阅读次数:
206
传送门 给你n(<=3e5)个区间,让你从中选出k(<=n)个,使这些区间的交集长度最大。区间范围[-1e9, 1e9] 要求输出区间长度和选取的区间编号 典型的优先队列问题。先把区间按左值从小到大排序,这样做保证了后面取出来的区间的左值大于先前所有的,然后我门就只需要比较右值了。注意到最终答案的区 ...
分类:
其他好文 时间:
2017-09-22 23:55:11
阅读次数:
181
1.C语言规定只有相同类型的指针才可以相互赋值。 Void*指针作为左值用于接收任意类型的指针, void*指针作为右值赋给其他指针时需要强制类型转换。 2.在C语言中Const修饰的变量是只读的,本质还是变量。 口诀:左数右指 不可改变: 当Const出现在*号左边时,指针指向的数据为常量。 当C ...
分类:
其他好文 时间:
2017-09-14 19:01:34
阅读次数:
158
右值引用和移动操作是C++11提出的新概念,通过这些操作,可以降低拷贝操作带来的消耗。先来简单介绍一下左值和右值。 左值一般指的是一个对象,或者说是一个持久的值,例如赋值的返回值、下标操作、解引用以及前置递增等。 右值是一个短暂的值,比如一个表达式的求值结果、函数返回值以及一个字面值等。 为了区分, ...
分类:
移动开发 时间:
2017-09-12 22:05:34
阅读次数:
252
左值就是在赋值中可以放在赋值操作符两边的值 右值则是只可以放在赋值操作符右边的值 ++i是直接给i变量加1,然后返回i本身,因为i是变量,所以可以被赋值,因此是左值表达式i++现产生一个临时变量,记录i的值,而后给i加1,接着返回临时变量,然后临时变量不存在了,所以,不能再被赋值,因此是右值表达式 ...
分类:
编程语言 时间:
2017-09-10 22:14:43
阅读次数:
213
几大原则 一、静态成员变量(Static) 1、静态成员变量为类变量,所有对象共享同一内存空间 2、静态成员变量的声明和定义仅在首次加载类时执行一次 3、首次加载类时首先对所有静态成员变量根据类型默认赋初值,然后再对有右值的附右值 二、静态初始块 1、静态初始化块仅在首次加载类时执行一次 2、多个静 ...
分类:
其他好文 时间:
2017-09-09 11:47:50
阅读次数:
156
练习13.55 练习13.56 此时拷贝一个副本,但是问题来了,ret是一个左值,返回他的sorted函数,会不停的进行递归自己,而该函数并没有一个终止条件,所以最后堆栈会溢出,导致程序异常终止; 练习13.57 此时函数返回的是一个临时对象的sorted函数,而临时对象是一个右值,这时会调用右值的 ...
分类:
编程语言 时间:
2017-09-06 20:43:44
阅读次数:
248