• 右值目前


    一、右值

    1、
    int&& b = 6; //这个时候只能右值引用

    2、
    template<typename T>
    void printValue( T&& t)
    {
        cout << "r-value: " << t << endl;
        t = 0;
    }
    函数里面的T&& ,即可也接收左值也可以接收右值,除非被重写
    3
    template<typename T>
    void printValue(const T&& t) //这个时候只能接收右值
    {
        cout << "r-value: " << t << endl;
        t = 0;
    }

    二完美转发
    就是再传参时,还能是右值
    forward的由来:保持住参数的右值属性。

    模板函数中的推导类型,作为另一函数的参数时,不管实参是什么类型,作为另一个参数的实参时,都变成了左值。
    因为C++里规定函数的形参就是左值,不管调用侧的实参是否是右值。
    https://www.cnblogs.com/xiaoshiwang/p/9589008.html

    move 转换为右值引用,forward右值转发出去


    三move重要

    move的本质就是帮助编译器选择重载函数, 告诉编译器"请尽量把此参数当做右值来处理"

    但是要清楚机制的时机,主要是拷贝构造函数的时候


    void testfun(HasPtrMem a){};

    void main(){
        HasPtrMem a;
        testfun(a);  //调用拷贝构造函数
        testfun(std::move(a));//调用移动构造函数
    }
    所以开源项目中 move使用非常多
    但是感觉通过传引用更好啊
    void testfun1(HasPtrMem& a){};
    testfun1(a);


    已结
    https://www.cnblogs.com/cnchengv/p/15811578.html
  • 相关阅读:
    CSS动画DAY01
    第5章到8章小结
    实验9 根据材料编程
    实验5 编写、调试具有多个段的程序
    实验4 [bx]和loop的使用
    实验3 编程、编译、连接、跟踪
    第3章 寄存器(内存访问)小结
    实验2 用机器指令和汇编指令编程
    实验1 查看CPU和内存,用机器指令和汇编指令编程
    字符串生成及加密
  • 原文地址:https://www.cnblogs.com/cnchengv/p/16376067.html
Copyright © 2020-2023  润新知