C++ 类

一、观察拷贝函数执行多少次

1、示例

#include 
using namespace std;
class Myclass
{
private:
    /* data */
public:
    Myclass(/* args */);
    ~Myclass();
    Myclass(const Myclass& other){
        cout << "执行了拷贝构造" << endl;
    }
};
Myclass::Myclass(/* args */)
{
    cout << "执行构造函数" << endl;
}
Myclass::~Myclass()
{
}
Myclass helper(Myclass &obj) {
    return obj;
}

Myclass fun(Myclass &base){
    Myclass t;
    cout << "---" << endl;
    return helper(t);
}
int main(){
    Myclass s;
    Myclass x = fun(s);
}

2、编译g++ t.cpp
3、输出结果

执行构造函数
执行构造函数
---
执行了拷贝构造

4、问题:为什么拷贝函数,没有执行预期的次数2
5、解释:在 C++11 中,编译器可能会执行返回值优化 (RVO) 或命名返回值优化 (NRVO) 来避免调用拷贝构造函数。这是编译器做的工作,但是我们依然需要知道拷贝执行了多少次,对细节把控,能写出高性能代码
6、设置无优化 (RVO),编译g++ t.cpp -fno-elide-constructor,禁止拷贝函数优化
7、输出结果

执行构造函数
执行构造函数
---
执行了拷贝构造
执行了拷贝构造
执行了拷贝构造

你可能感兴趣的:(c++,开发语言)