首页 > 编程语言 >C++类的默认函数(特种函数)

C++类的默认函数(特种函数)

时间:2023-03-03 17:14:33浏览次数:33  
标签:std Widget end 函数 default 默认 start C++ time

默认不显示地声明

#include <iostream>
#include <chrono>
#include <unordered_map>
using namespace std;
using namespace std::chrono;

class Widget{
public:
    // Widget()=default;
    // ~Widget()=default;
    // // 拷贝构造
    // Widget(const Widget&) = default;
    // // 复制赋值运算符
    // Widget& operator=(const Widget& obj) = default;
    // // 移动构造
    // Widget(Widget&&) = default;
    // // 移动赋值预算符
    // Widget& operator=(Widget&&) = default;

    void setValues(){
        std::string temp = "test 111111111111111111111111111111111111111111111111111111111111111";
        for(size_t i=0; i< 1000; i++){
            values[i] = temp;
        }
    }
    std::unordered_map<int ,std::string> values;
};

// g++ test.cpp -std=c++11 -o test
int main(){
    auto start_time = steady_clock::now();
    // auto widget = Widget();
    Widget widget;
    widget.setValues();
    auto end_time = steady_clock::now();
    auto ts = duration_cast<microseconds>(end_time-start_time);
    std::cout<<"默认构造时间:"<< ts.count() << " ms" << std::endl;


    // 赋值构造
    start_time = steady_clock::now();
    // auto widget_copy = Widget(widget);       // 与下一句等价。调用的是拷贝构造
    // auto widget_copy = widget;               // 与下一句等价。调用的是拷贝构造
    auto widget_copy(widget);
    end_time = steady_clock::now();
    ts = duration_cast<microseconds>(end_time-start_time);
    std::cout<<"赋值构造时间:"<< ts.count() << " ms" << std::endl;
    // std::cout<<"copy value size: "<< widget_copy.values.size() << std::endl;


    // 复制赋值运算符
    start_time = steady_clock::now();
    Widget widget_copy_;
    widget_copy_ = widget;                          // 复制赋值运算符
    end_time = steady_clock::now();
    ts = duration_cast<microseconds>(end_time-start_time);
    std::cout<<"复制赋值运算符时间:"<< ts.count() << " ms" << std::endl;
    std::cout<<"  复制赋值运算符 value size: "<< widget_copy_.values.size() << std::endl;


    // 移动构造
    start_time = steady_clock::now();
    auto widget_move = std::move(widget_copy_);  // 与下一句等价。调用的是拷贝构造
    // auto widget_move = Widget(std::move(widget_copy_));  // 与下一句等价。调用的是拷贝构造
    // auto widget_move(std::move(widget_copy_));
    end_time = steady_clock::now();
    ts = duration_cast<microseconds>(end_time-start_time);
    std::cout<<"移动构造时间:"<< ts.count() << " ms" << std::endl;
    std::cout<<"  移动构造 value size: "<< widget_move.values.size() << std::endl;

    // 移动赋值运算符
    start_time = steady_clock::now();
    Widget widget_move_;
    widget_move_ = std::move(widget_move);                          // 复制赋值运算符
    end_time = steady_clock::now();
    ts = duration_cast<microseconds>(end_time-start_time);
    std::cout<<"移动赋值运算符时间:"<< ts.count() << " ms" << std::endl;
    std::cout<<"  移动赋值运算符 value size: "<< widget_move_.values.size() << std::endl;

}

输出

默认构造时间:625 ms
赋值构造时间:387 ms
复制赋值运算符时间:404 ms
  复制赋值运算符 value size: 1000
移动构造时间:0 ms
  移动构造 value size: 1000
移动赋值运算符时间:0 ms
  移动赋值运算符 value size: 1000

标签:std,Widget,end,函数,default,默认,start,C++,time
From: https://www.cnblogs.com/xiaohuidi/p/17176270.html

相关文章

  • mysql select into outfile默认文件保存路径是C:\ProgramData\MySQL\MySQL Server
    找到my.ini,修改usecure_file_priv=''然后保存并且退出。重启mysql正确的解决方法是:搜索“服务”并进入:下拉找到Mysql左上角处可以进行重启动。如果以后想要通......
  • 重要内置函数、常见内置函数(了解)、可迭代对象、迭代器对象、for循环原理、异常捕获
    目录一、重要内置函数二、常见内置函数(了解)三、可迭代对象四、迭代器对象五、for循环内部原理六、捕捉异常一、重要内置函数1.zip说白了就是压缩几组数据值,说细了......
  • day12-递归与高阶函数
    一、递归#衔尾蛇#递归特点#1,函数内部调用自己#2,必须要有出口实例1:#有规律循环打印1-9deffunc(start,stop):   print(start) #9   ifstart==......
  • 轻松玩转makefile | 函数的使用
    前言在上一篇文章中,尽管使用了变量和模式,但还是有不够好的地方,在Makefile中要指明每一个源文件,我们接下来利用函数对其进行优化,并介绍其他常用的一些函数。依旧是以fun.c......
  • 如何写出漂亮的构造函数 option funciton
    1. Golang里面没有构造函数,但是Golang却可以像C++一样实现类似继承、构造函数一样等面向对象编程的思想和方法Golang里面要实现相关的构造函数定义可以通过通过new来创建......
  • SQLite的ROUND函数的坑和解决方案
    今天使用sqlite的round函数对数据进行四舍五入处理,但遇到了以下问题,如图所示: 为什么结果不一样,不得而知,但我找到了解决方案,同大家分享一下。首先在c#中创建自定义函数[......
  • C++时间对秒数的运算
    使用引用#include<iostream>usingnamespacestd;structTime{ inth; intm; ints;};voidtimeCompute(Time&t,intsec){ //引用作为形参 t.m=t.m+(t.s......
  • c++ 五种排序方式
    第一种:冒泡排序冒泡排序遍历两次数组,时间复杂度On2,每一次用一个元素和后续其他所有元素比较,若是大小不符合预期则反转位置,具体实现代码如下:#include<iostream>#include......
  • Springboot Controller接口默认自动填充 业务实体参数值
    前言今天看有小伙伴求救: 我还是一贯如此,有人不明白,没玩过HandlerMethodArgumentResolver。那么很可能不止他一个人,那么我就有必要出手。不多说,开搞。 正文快速模拟出......
  • 《SQL基础》14. 存储过程 · 存储函数
    目录存储过程基本语法变量系统变量用户定义变量局部变量if判断参数case判断while循环repeat循环loop循环游标条件处理程序存储函数存储过程存储过程是事先经过编译并存......