首页 > 编程语言 >c++11 std::forward使用场景以及作用

c++11 std::forward使用场景以及作用

时间:2023-04-25 17:46:32浏览次数:112  
标签:11 std cout int void c++ && forward

  • 不使用 std::forward时,下述代码G不管传入什么类型的参数,只会最终调用 void F(int& a);

using namespace std;

 

void F(int& a) {

    cout << "int& version " <<a <<endl;

}

 

void F(int&& a) {

    // do something

    cout << "int&& version " <<a <<endl;

}

 

template<class A>

void G(A &&a) {

    F(a); 

}

 

int main (int argc, char *argv[]) {

    int i = 2;

    G(i); //int& version

    G(5); //int& version

  return 0; 

}

  • 用 std::forward时,G的最终调用出现差异化;

using namespace std;

 

void F(int& a) {

    cout << "int& version " <<a <<endl;

}

 

void F(int&& a) {

    // do something

    cout << "int&& version " <<a <<endl;

}

 

template<class A>

void G(A &&a) {

    F(std::forward<A>(a));

}

 

int main (int argc, char *argv[]) {

    int i = 2;

    G(i); 

    G(5);

    return 0;

}

  • 使用与不使用 std::forward的区别:

函数模板 void G(A &&a)内部是无法知道形参对应的实参,到底是个普通变量,还是濒死的临时变量?

只能原封不动的完美的转发std::forward给函数模板 void G(A &&a)调用的下一层函数。

所以,std::forward转发问题针对的是模板函数。

 

from:https://www.cnblogs.com/rayfloyd/p/14309276.html

 

标签:11,std,cout,int,void,c++,&&,forward
From: https://www.cnblogs.com/im18620660608/p/17353345.html

相关文章

  • C++语言亚马逊国际获取AMAZON商品详情 API接口
    跨境电子商务是一种全新的互联网电商模式,运用电子化方式促成线上跨境交易,利用跨境物流运送商品,有利于打破传统的贸易格局,成为新的经济增长点。对我国来说,跨境电商平台正用一种全新的力量改变我国产业链的结构,并有利于增加贸易机会,拓展我国外贸在国际市场的广度与深度,赢得广阔的海......
  • nginx-lua-fastdfs-GraphicsMagick整合
      无意发现了一个不错的分布式文件系统。fastdfs开源的分布式文件系统,此脚本利用nginxlua模块,动态生成图片缩略图,fastdfs只存一份原图。lua通过socket获取fastdfs的原图,并存放到本地,根据不同规则url,例如:_60x60.jpg、_80x80.jpg,类似淘宝图片url规则。利用gm命令生成本地缩略图......
  • 11th
    二分查找作为一个比较重要的算法 比如对一个升序序列1234567;想要知道某一个数的位置或者是下标第一步设立左中右 intleft,mid,right;让左中右分别指向左边中间右边left=0,right=7,mid=(left+right)/2 当mid这个数所指的这个数比所想要找的数小......
  • 名字修饰约定: extern "C"、extern "C++" 和__stdcall、__cdecl相关的约定、__imp_前
    关于extern_C通常,在C语言的头文件中经常可以看到类似下面这种形式的代码#ifdef__cplusplusextern"C"{#endif/****somedeclarationorso*****/#ifdef__cplusplus}#endif/*endof__cplusplus*/那么,这种写法什么用呢?实际上,这是为了让CPP能够与C......
  • 《c++徒步》方法篇
    按值传递和按地址传递参考链接:https://blog.csdn.net/scrence/article/details/79835572参考链接:https://www.jb51.net/article/250343.htm1、按值传递#include<iostream>usingnamespacestd;voidchangeNumber(intx);intmain(void){ inta=10; cout<<"a="......
  • C++ shared_ptr 虚析构函数 特殊
    classa{public:~a(){cout<<"a"<<endl;}classb:publica{public:~b(){cout<<"b"<<endl;}voidmain(){shared_ptrA;{shared_ptrB(newb());//智能指针内部,uses引用值为1A=B;//智能指针内部,uses引用值为2,子类父类的智能指针可以一起计数}//离开作用......
  • P.10-准备工作、P.11-数据库校验用户准备工作、P.12-数据库验证用户核心代码实现
    P.10-准备工作1.添加依赖<!--redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>......
  • AtCoder Regular Contest 115 F Migration
    洛谷传送门AtCoder传送门这种最大值最小化的题一般可以先考虑二分。设二分了一个\(mid\)。记\(A=(a_1,a_2,...,a_k)\)为表示每个棋子的位置的状态,如果\(A,B\)可以互相到达,就在它们之间连一条无向边。则要判断的是\(S=(s_1,s_2,...,s_k)\)和\(T=(t_1,t_2,...,t_k......
  • 【面试宝典】C/C++ 基础
    一.语言基础 数组和指针的区别 数组指针概念是用于储存多个相同类型数据的集合。 数组名是首元素的地址特殊的变量,存放的是其它变量在内存中的地址。 指针名指向了内存的首地址赋值只能一个一个元素的赋值或拷贝同类型指针变量可以相互赋值存放方式连续......
  • FX110网:3月机构货币交易量出炉!Cboe环比增幅最大
    全球主要机构平台2023年3月份的交易量已经公布,呈现出整体上升的趋势。报告涵盖了六个主要场所的机构货币交易量的日均交易量(ADV),即CboeFX、CLS、EuronextFX、FxSpotStream、Refinitiv、360T,如下图所示。这六家公司2023年3月的日均货币交易量比上个月都有所增加。总体而言,Cboe的月......