记录一下这几个容易混淆的概念。 可移动构造(MoveConstructible) 指定该类型的实例可以从一个右值实参构造 定义 给定: T类型的右值表达式rv 任意标识符 u 下列表达式必须合法且拥有指定的效果: T u = rv; //u 的值等于 rv 在初始化前的值。rv 的新值未指明。T(r ...
分类:
移动开发 时间:
2020-04-19 12:49:11
阅读次数:
90
对于变量而言, 左值可以使用 int& val = num; 对于常数而言,右值可以使用const int& val = num; 临时变量是右值 /* 左值 */ #include <iostream> using namespace std; int func(void) { int num = ...
分类:
编程语言 时间:
2020-03-30 15:52:01
阅读次数:
54
新标准的一个最主要的特性就是可以移动而非拷贝对象的能力,在某些情况下,对象拷贝后会立即销毁,在这些情况下,使用移动而非拷贝对象能够大大提升性能。 另外像 类 这样的类,都包含不能被共享的资源,这些类型的对象不能拷贝但是可以移动。 右值引用 为了支持移动操作,新标准引入了一种新的引用类型 右值引用。所 ...
分类:
移动开发 时间:
2020-03-15 13:17:44
阅读次数:
75
一直对这个概念比较模糊,读到《C++ primer》发现其中有讲解,截下图来记录。 ...
分类:
编程语言 时间:
2020-03-13 13:24:41
阅读次数:
47
C-指针 概念 保存地址的变量 普通变量的值是实际的值,指针变量的值时具有实际值的变量的地址 运算符& 作用:获取变量的地址,并且后面永远跟着的是变量 &可以取出一个变量的地址,这个地址的大小,数据类型是否与int相同取决于编译器(64 or 32) 1 #include <stdio.h> 2 3 ...
分类:
其他好文 时间:
2020-02-29 22:21:10
阅读次数:
68
```cpp#include #include #include #include #include static void autoValue();static void autoPointer();static void newVersionFor();static void newVersio... ...
分类:
编程语言 时间:
2020-02-24 20:26:26
阅读次数:
114
右值引用 :int &&p 左值引用:即普通引用 int& p 常量左值引用:const int& p 共同点:都是变量,都是引用 区别:左值引用只能绑左值,右值引用只能绑右值,但注意右值引用同样也是变量,是左值! 常量左值引用却是个奇葩,它可以算是一个“万能”的引用类型,它可以绑定非常量左值、常量 ...
分类:
编程语言 时间:
2020-02-23 22:30:43
阅读次数:
77
lvalue(左值)和rvalue(右值) 昨天写代码遇见一个这样的错误: 代码类似下边 编译器告诉我们:“不能将非const的lvalue引用 和 rvalue绑定”,里边有两个关键词: 和`rvalue`。 什么是lvalue(左值) 简单定义:内存中有确定存储地址的对象的表达式的值,可以是一个 ...
分类:
编程语言 时间:
2020-02-23 16:23:09
阅读次数:
96
lambda 表达式分析 构造闭包:能够捕获作用域中变量的匿名函数的对象,Lambda 表达式是纯右值表达式,其类型是独有的无名非联合非聚合类类型,被称为闭包类型(closure type),所以在声明的时候必须使用 来声明。 在其它语言如lua中,闭包的格式相对更为简单,可以使用 lambda 表 ...
分类:
编程语言 时间:
2020-01-30 09:54:44
阅读次数:
94
引用 左值引用,建立既存对象的别名 右值引用,可用于为临时对象延长生命周期 转发引用,保持函数实参的类别 悬置引用,对象生命周期已经结束的引用,访问改引用为未定义行为 值类别,左值,纯右值,亡值 std::move, std::forward 类型推导 引用塌缩(折叠) 可以通过模板或者 typed ...
分类:
编程语言 时间:
2020-01-27 23:35:18
阅读次数:
97