第一种情况:
是const T & 拿到的值,本身就不可改变,所以都一样是调用拷贝
第二种情况:
此时我们是主动调用的std::move,所以就都是一样的移动赋值。
第三种情况:
都是构造然后移动赋值然后再析构刚才的临时对象。
第四种情况:
push_back还是一样的,但是emplae_back的话,就是不用再构造临时对象了,直接就是在vector的尾部创建一个所需要的对象,减少移动构造和析构临时对象的成本!
其实总的来说,emplace_back和push_back只有在第四种情况有区别,一般是没有区别的!
但是emplace_back和push_back也有笔误时的不同
push_back会编译错误,但是emplace_back是插入一个开辟大空间的vector。