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