Guaranteed copy elision 缺省复制 发表于 2020-05-24 分类于 C++ 本文字数: 137 阅读时长 ≈ 1 分钟 在c++17上,通过对value category修改,glvalue提供要被初始化的对象的地址,prvalue提供initializer。 1234567891011121314151617#include <iostream> class A { public: A() = default; A(A &&prev) = delete; // A(A &&prev) { std::cout << "Print1"; } }; int main() { A a = A(); std::cout << "aaa"; } 所以上面的代码,在c++17之前是编译不过的,A a = A() 这里调用了move构造,虽然编译器会优化掉,不会真正调用,但是move构造必须留着,不能删除。 但是在c++17后,是直接在value category层级,就保证了不会调用move构造。