30 lines
746 B
C++
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()); // 应该只调用一次拷贝构造函数
|
|
}
|