#include <iostream>
struct Heavy {
Heavy() { std::cout << "ctor "; }
Heavy(const Heavy&) { std::cout << "copy "; }
Heavy(Heavy&&) { std::cout << "move "; }
};
Heavy make() {
return Heavy();
}
int main() {
Heavy h = make();
} #include <iostream>
struct Heavy {
Heavy() { std::cout << "ctor "; }
Heavy(const Heavy&) { std::cout << "copy "; }
Heavy(Heavy&&) { std::cout << "move "; }
};
Heavy make() {
return Heavy();
}
int main() {
Heavy h = make();
} 一定输出 ctor copy
一定输出 ctor move
C++17起保证只输出 ctor(强制复制省略)
输出取决于编译器优化级别
Heavy make() { return Heavy(); // 这里只调用 ctor } int main() { Heavy h = make(); // 危险在这里! }
ctor copy
ctor move
ctor