std::forward完美转发

保证参数原来的属性(用在template的参数是引用的时候):左值引用在被转发之后仍然保持左值属性,右值引用在被转发之后依然保持右值属性

void show(int& num) {
std::cout<<"lvalue:"<<num<<std::endl;
} void show(int&& num) {
std::cout<<"rvalue:"<<num<<std::endl;
} template<typename T>
void WrapperForward(T&& t) {
show(std::forward<T>(t));
} template<typename T>
void WrapperNoForward(T&& t) {
show(t);
} void TestForward() {
std::cout<<__FUNCTION__<<std::endl;
int num1=10;
WrapperForward(num1); WrapperForward(20);
} void TestNoForward() {
std::cout<<__FUNCTION__<<std::endl;
int num1=10;
WrapperNoForward(num1); WrapperNoForward(20);
}

std::move

将左值转化为右值

void TestMove() {
std::cout<<__FUNCTION__<<std::endl;
int num3=30;
WrapperForward(std::move(num3));
} void TestNoMove() {
std::cout<<__FUNCTION__<<std::endl;
int num3=30;
WrapperForward(num3);
}

std::forward和std::move的更多相关文章

  1. C++11 std::move和std::forward

    下文先从C++11引入的几个规则,如引用折叠.右值引用的特殊类型推断规则.static_cast的扩展功能说起,然后通过例子解析std::move和std::forward的推导解析过程,说明std: ...

  2. C++0x,std::move和std::forward解析

    1.std::move 1.1std::move是如何定义的 template<typename _Tp> constexpr typename std::remove_reference ...

  3. std::move()和std::forward()

    std::move(t)负责将t的类型转换为右值引用,这种功能很有用,可以用在swap中,也可以用来解决完美转发. std::move()的源码如下 template<class _Ty> ...

  4. item 23: 理解std::move和std::forward

    本文翻译自<effective modern C++>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 根据std::move和std::forward不 ...

  5. Item 25: 对右值引用使用std::move,对universal引用则使用std::forward

    本文翻译自<effective modern C++>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 右值引用只能绑定那些有资格被move的对象上去.如 ...

  6. 关于C++11中的std::move和std::forward

    std::move是一个用于提示优化的函数,过去的c++98中,由于无法将作为右值的临时变量从左值当中区别出来,所以程序运行时有大量临时变量白白的创建后又立刻销毁,其中又尤其是返回字符串std::st ...

  7. c++11 标准库函数 std::move 和 完美转发 std::forward

    c++11 标准库函数 std::move 和 完美转发 std::forward #define _CRT_SECURE_NO_WARNINGS #include <iostream> ...

  8. [C/C++]关于C++11中的std::move和std::forward

    http://www.cnblogs.com/cbscan/archive/2012/01/10/2318482.html http://blog.csdn.net/fcryuuhou/article ...

  9. 透彻理解C++11新特性:右值引用、std::move、std::forward

    目录 浅拷贝.深拷贝 左值.右值 右值引用类型 强转右值 std::move 重新审视右值引用 右值引用类型和右值的关系 函数参数传递 函数返还值传递 万能引用 引用折叠 完美转发 std::forw ...

随机推荐

  1. Quantitative Proteomics of Enriched Esophageal and Gut Tissues from the Human Blood Fluke Schistosoma mansoni Pinpoints Secreted Proteins for Vaccine Development (解读人:张聪敏)

    文献名:Quantitative Proteomics of Enriched Esophageal and Gut Tissues from the Human Blood Fluke Schist ...

  2. NIO的原理和文件读入读出及图片拷贝的使用

    1.NIO的简介        java.nio 全称 java non-blocking IO 是jdk1.4之后出现的 New IO        为所有的原始类型(boolean除外)提供了缓存 ...

  3. android studio 导入RecyclerView

  4. django之 F与Q查询

    F与Q查询 F查询 why?

  5. hdu1171kmp果题

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1711/ #include<bits/stdc++.h> using namespace std; t ...

  6. 洛谷1880 区间dp+记忆化搜索 合并石子

    题目网址:https://www.luogu.com.cn/problem/P1880 题意是:给定一个序列,最小规则是相邻两个值的合并,开销是他们的和,将整个序列合并成一个值的情况下,求解该值的最小 ...

  7. Android初级控件

    Android初级控件 从今天开始就对Android进行正式的学习,首先先来学习一下初级的控件 1.TextView  文本框,用于显示文字,不可编辑. 常用属性 android:autoLink   ...

  8. OpenCV-Python 直方图-4:直方图反投影 | 二十九

    目标 在本章中,我们将学习直方图反投影. 理论 这是由Michael J. Swain和Dana H. Ballard在他们的论文<通过颜色直方图索引>中提出的. 用简单的话说是什么意思? ...

  9. [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林

    [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林 0x00 摘要 本文将尽量使用通俗易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来看,运用感性直觉的思考来 ...

  10. js拖拽效果的实现及原理

    元素拖拽分成3个步骤:按下鼠标,移动鼠标,松开鼠标. 拖拽原理:按下拖拽元素后开始监听文档中鼠标移动事件,然后再监听鼠标松开事件:鼠标移动时,元素div要随着鼠标一起移动,需要计算元素div位移的距离 ...