默认不显示地声明
#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