首页 > 编程语言 >C++中分别使用左值形参和右值形参的拷贝构造和移动构造

C++中分别使用左值形参和右值形参的拷贝构造和移动构造

时间:2023-06-01 11:25:52浏览次数:41  
标签:形参 右值 lvalue rvalue 构造 copy EMPTY

#include <iostream>

class Data {
public:
  Data() { std::cout << "EMPTY." << std::endl; }
  Data(const Data &d) { std::cout << "lvalue copy." << std::endl; }
  Data(const Data &&d) { std::cout << "rvalue copy." << std::endl; }
  Data &operator=(const Data &d) {
    std::cout << "lvalue assign." << std::endl;
    return *this;
  }
  Data &operator=(const Data &&d) {
    std::cout << "rvalue assign." << std::endl;
    return *this;
  }
};

int main(int argc, char *argv[]) {
  std::cout << "data0: ";
  Data data0;
  std::cout << "data1: ";
  Data data1 = data0;
  std::cout << "data2: ";
  Data data2(data0);
  std::cout << "data3: ";
  Data data3 = std::move(data0);
  std::cout << "data4: ";
  Data data4(std::move(data1));
  std::cout << "data5: ";
  Data data5;
  data5 = data2;
  std::cout << "data6: ";
  Data data6;
  data6 = std::move(data2);
}

  运行结果:

data0: EMPTY.
data1: lvalue copy.
data2: lvalue copy.
data3: rvalue copy.
data4: rvalue copy.
data5: EMPTY.
lvalue assign.
data6: EMPTY.
rvalue assign.

  

标签:形参,右值,lvalue,rvalue,构造,copy,EMPTY
From: https://www.cnblogs.com/qiandeheng/p/17448409.html

相关文章

  • JDK 8 新特性:构造器引用(了解)
       ......
  • 编译器绕过拷贝构造函数和返回值优化
    写在前面:在拷贝初始化(也就是用等号初始化,注意使用拷贝构造函数创建一个新的对象不属于拷贝初始化)过程中,编译器可以(但不是必须)跳过拷贝构造函数或者移动构造函数,直接创建对象。1stringnull_book="999";2//可以改写为3stringnull_book("999");这里面”999“隐式的转换为......
  • 继承中构造方法案例
    /***创建一个教师类,有姓名和年龄两个参数*打印出比如“姓名为张三年龄30岁的老师正在讲课”*创建一个学生类,有姓名,年龄,成绩三个参数*打印出比如“姓名为李四年龄20岁成绩100分的学生正在上课”*///测试类publicclasstest1{publicstaticvoidmain(String[......
  • 结构体就算不用构造函数也可以初始化
    标题结构体就算不用构造函数也可以初始化#include<iostream>#include<vector>#include<algorithm>#include<string>#include<queue>#include<set>usingnamespacestd;structstateAndLevel{ stringstr; intlevel;};queue<stateAndLevel>......
  • 前端之vue3的setup和setup的2个的形参、响应式页面
    setupsetup是个函数,包含数据、方法等,是组合api的“舞台”。setup返回值:1.对象,其中的属性、方法都可以在模板中直接使用2.渲染含数(了解就好)exportdefault{name:"App",components:{},setup(){//非响应式变量letname="欧西里斯";letage=18;......
  • 【重学C++】05 | 说透右值引用、移动语义、完美转发(下)
    文章首发【重学C++】05|说透右值引用、移动语义、完美转发(下)引言大家好,我是只讲技术干货的会玩code,今天是【重学C++】的第五讲,在第四讲《【重学C++】04|说透右值引用、移动语义、完美转发(上)》中,我们解释了右值和右值引用的相关概念,并介绍了C++的移动语义以及如何通过右值引......
  • 委托构造函数
    一.当构造受委托的构造函数时,受委托的构造函数函数体会执行而委托构造函数函数体不会执行;classPerson{public:Person(){cout<<"这是一个无参构造"<<endl;}Person(constPerson&p){cout<<"这是一个拷贝构造"<<endl;......
  • 通过this(...)调用兄弟构造器的作用
    packagecom.Demo1;publicclassTest{publicstaticvoidmain(String[]args){//掌握在类的构造器中,通过this(...)调用兄弟构造器的作用Students1=newStudent("李四",26,"家里蹲大学");//如果学生没有学校,那么学校默认就是黑马程序员......
  • 子类构造器常见应用
    packagecom.Demo1;publicclassTest{publicstaticvoidmain(String[]args){//搞清楚子类构造器为什么要调用父类构造器,有啥应用场景Teachert=newTeacher("李四",36,"Java");System.out.println(t.getName());System.out.pri......
  • 子类构造器的特点
        ......