博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
右值引用,move语义和完美转发
阅读量:4208 次
发布时间:2019-05-26

本文共 1085 字,大约阅读时间需要 3 分钟。

什么是右值;:

表达式的类型(Type)和值类别(Value category)

B a=B(1,1);

const B& b = a;
B&& c = std::move(a);

左值:拥有Id 且不可被移动,可以用取地址运算符& 获取地址。

亡值:拥有ID,且可移动。
纯右值:不拥有ID且可以移动。
泛左值: 左值和亡值。
右值:右值和亡值。

b 没拥有Id,不可以被移动。

样例:

#include 
#include
#include
#include
int TestFuncInt(int &a ) { return 16;}int main(){ std::shared_ptr
> AF = std::make_shared
>(TestFuncInt);std::cout << "AF address: "<< AF.get() << '\n';std::shared_ptr
> AF2; std::cout << "AF2 >>1>>address: "<< AF2.get() << '\n'; AF2 = std::make_shared
>(std::forward< std::function
>(*AF)); std::cout << "AF2 >>2>>address: "<< AF2.get() << '\n';std::function
&& fowawrd_F = std::move(*AF); // 转换成右值,需要使用*AF, 因为左值(AF)不能变成右值std::cout << "forward_F address:" << &fowawrd_F << '\n'; ForwardPrintInt(std::forward
>(fowawrd_F), AF2); // 继续使用右值,forward 完美转发 std::cout << "AF2 >> 3 >>address: "<< AF2.get() << '\n'; //return 0;}

输出:

AF address: 0x7ffb09402a70AF2 >>1>>address: 0x0AF2 >>2>>address: 0x7ffb09402ac0forward_F address:0x7ffb09402a70AF2 >> 3 >>address: 0x7ffb09402b40

转载地址:http://cdwmi.baihongyu.com/

你可能感兴趣的文章
内存(字节)对齐
查看>>
Linux学习记录--文件IO操作相关系统编程
查看>>
QSS知识总结
查看>>
C语言编译原理
查看>>
如何创建可执行程序
查看>>
Jenkins配置基于角色的项目权限管理
查看>>
Jenkins-Email Extension Plugin
查看>>
Jenkins—Jenkins是什么
查看>>
Jenkins系列—安装与配置
查看>>
读写CSV文件
查看>>
通过SMTP发邮件
查看>>
读写EXCEL
查看>>
文件读写&文件夹遍历
查看>>
Java读写Excel
查看>>
Jenkins生成图表插件
查看>>
Bat命令
查看>>
Python学习笔记1
查看>>
Python学习笔记2
查看>>
CAPL创建与语法简介
查看>>
Nant简单功能介绍
查看>>