CPlusPlusThings/basic_content/pointer_refer/copy_construct.cpp

30 lines
746 B
C++

/**
* @file copy_construct.cpp
* @brief g++ -o copy_construct copy_construct.cpp -fno-elide-constructors
* -fno-elide-constructors选项(关闭返回值优化)
* @author 光城
* @version v1
* @date 2019-08-09
*/
#include <iostream>
using namespace std;
class Copyable {
public:
Copyable() {}
Copyable(const Copyable &o) { cout << "Copied" << endl; }
};
Copyable ReturnRvalue() {
return Copyable(); // 返回一个临时对象
}
void AcceptVal(Copyable a) {}
void AcceptRef(const Copyable &a) {}
int main() {
cout << "pass by value: " << endl;
AcceptVal(ReturnRvalue()); // 应该调用两次拷贝构造函数
cout << "pass by reference: " << endl;
AcceptRef(ReturnRvalue()); // 应该只调用一次拷贝构造函数
}