zoukankan      html  css  js  c++  java
  • c++11 std::move移动构造引用相关释义

    • 先说 std::move的作用,std::move 就是帮助实现,当参数为左值的时候,如何调用 对象的移动构造函数而非拷贝构造函数。
    • 移动构造函数与拷贝构造函数的区别:

      拷贝构造的参数是const MyString& str,是常量左值引用,而移动构造的参数是MyString&& str,是右值引用。

    移动构造函数与拷贝构造不同,它并不是重新分配一块新的空间,将要拷贝的对象复制过来,而是"偷"了过来,将自己的指针指向别人的资源,然后将别人的指针修改为nullptr。

    c++11中的所有容器都实现了move语义,move只是转移了资源的控制权,本质上是将左值强制转化为右值使用,以用于移动拷贝或赋值,避免对含有资源的对象发生无谓的拷贝。

    C++11提供了std::move()方法来将左值转换为右值,从而方便应用移动语义,就是告诉编译器,虽然我是一个左值,但是不要对我用拷贝构造函数,而是用移动构造函数。

    • 关于引用

    (1)左值引用, 使用 T&, 只能绑定左值

    (2)右值引用, 使用 T&&, 只能绑定右值

    (3)常量左值, 使用 const T&, 既可以绑定左值又可以绑定右值

    (4)T&&在模板参数中表示万能引用,在非模板参数中表示右值引用。

    class Test {
        public:
            Test() {};
            ~Test() {};
    
            void func(const int &i) {
                std::cout << "This is Test::func "<<std::endl;
            }
    
            Test(const Test& t)
            {
                std::cout << "Test copy construct "<< std::endl;
            }
    
            Test(Test &&t) {
                std::cout << "Test move copy construct "<< std::endl;
            }
    };
    int main (int argc, char *argv[]) {
        
        Test t;
        Test tt;
        std::vector<Test> list;
        list.push_back(t);                //Test copy construct
        list.push_back(std::move(tt));  //Test move copy construct
        
        return 0;
    }
  • 相关阅读:
    Linux終端一行命令发送邮件
    团队冲刺2.4
    团队冲刺2.3
    团队冲刺2.2
    找水王
    评价win10自带输入法——微软拼音输入法
    梦断代码阅读笔记01
    团队冲刺2.1
    第十三周总结
    第十二周总结
  • 原文地址:https://www.cnblogs.com/rayfloyd/p/14308832.html
Copyright © 2011-2022 走看看