新版的C++标准库出现了很多C++11的新特性,刚开始接触确实很费劲,特别是右值引用和move函数这种基于效率的考虑损失了语言的简单直接的特性,废话不多说,先看右值引用。C++中根据const和non_const,lvalue和rvalue可分为四类对象 non_const const...
分类:
编程语言 时间:
2015-05-02 18:07:09
阅读次数:
128
l 利用{}进行所有容器和数据结构的就地初始化,还可以直接用于返回值,对自定义类型进行就地初始化使用initializer_list
l 通过右值引用,函数可以自由的返回大对象,同时带资源赋值更加高效,由此指针可在任何情况下退出使用(库除外)
l 全局唯一资源可封装为只可移动不可拷贝语义
l 任何非引用数据都可以成为联合体的成员
l final、override、virtual等...
分类:
编程语言 时间:
2015-04-24 12:38:50
阅读次数:
121
程序的生命力体现在它千变万化的行为,而再复杂的系统都是由最基本的语句组成的。C语句形式简单自由,但功能强大。从规范的角度学习C语法,一切显得简单而透彻,无需困扰于各种奇怪的语法。
1. 表达式(expression)
1.1 简单表达式
一个表达式最重要的属性是它的值,可以定位其对象的值叫左值(l-value,locator value),其它叫右值(r-value)。右值只是临时值...
分类:
其他好文 时间:
2015-04-19 14:45:32
阅读次数:
108
1)首先说左值和右值的定义:
变量和文字常量都有存储区,并且有相关的类型。区别在于变量是可寻址的(addressable)对于每一个变量都有两个值与其相联:
1).它的数据值,存储在某个内存地址中。有时这个值也被称为对象的右值(rvalue,读做are-value).我们也可认为右值的意思是被读取的值(read value)。文字常量和变量都可被用作右值。
2).它的地址值——即存储数据...
分类:
其他好文 时间:
2015-04-15 17:16:41
阅读次数:
120
乍看起来,move语义使得你可以用廉价的move赋值替代昂贵的copy赋值,完美转发使得你可以将传来的任意参数转发给 其他函数,而右值引用使得move语义和完美转发成为可能。然而,慢慢地你发现这不那么简单,你发现std::move并没有move任何东西,完美转发也并不完美,而T&&也不一定就是右值引用……
move语义
最原始的左值和右值定义可以追溯到C语言时代,左值是可以出现在赋值符...
分类:
其他好文 时间:
2015-04-15 13:31:03
阅读次数:
150
#include
using namespace std;
void swap(int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void Grial(int a[],int x,int y)
{
int i=x-1;
int j=x;
int key = a[y];
if(x>=y)return ;
while(j<y...
分类:
编程语言 时间:
2015-04-15 11:27:18
阅读次数:
192
本文翻译自关于右值引用解释的经典文章,如果英文还可以的话,直接去看英文原文。thbecker.net/articles/rvalue_references/section_01.html右值引用是c++中的一个特性,并且已经入驻c++11标准,可能大家一开始接触的时候感觉有点难以理解,但是他的确是很...
分类:
移动开发 时间:
2015-04-11 16:15:07
阅读次数:
141
条件运算符形式:cond ? expr1 : expr2;在C语言中执行过程是:先对cond求值,值为真返回expr1的值,否则返回expr2的值.(右值)gcc测试结果:在Cpp中如果两个表达式都是左值的话,那么运算的结果也是左值(也就是表达式本身,我给表达式赋值并打印出来),否则就是右值。
分类:
其他好文 时间:
2015-04-11 14:48:24
阅读次数:
148
今天看到一个名词——右值,不明所以,查了下百科,在此记录一下。左值(lvalue)和右值(rvalue)最先来源于编译。在C语言中表示位于赋值运算符两侧的两个值,左边的就叫左值,右边的就叫右值。它们的定义是:左值指的是如果一个表达式可以引用到某一个对象,并且这个对象是一块内存空间且可以被检查和存储,...
分类:
其他好文 时间:
2015-04-08 06:37:30
阅读次数:
168