【C++】拷贝对象时,编译器的偷偷优化

你知道吗?对于连续的”构造+拷贝构造“,编译器其实是会默默做出优化的。👻

如果你不知道这个知识点的话,那下面这道笔试题就要失分了😵。

本篇分享一个关于编译器优化的小知识,看完本篇,你就能知道程序里的 构造函数、拷贝构造函数 究竟被调了几次~

题目引入

某笔试题:下面的程序经历了几次构造?几次拷贝构造?

答案为:

1次构造,4次拷贝

对此题的分析在本篇末尾。如果你对这道题尚有存疑,那相信看完本篇,你的疑惑将会烟消云散~👻

传值传参 的优化

我们知道,传值传参会产生拷贝,因为这样能保证 函数内部对参数的操作 不会影响到原始变量的值。

➡️先看一个没做优化的例子:

class W
{
public:
    //构造函数
    W(int w) 
        :_w(w)
    {
        cout << "W()" << endl;
    }
    //拷贝构造函数
    W(const W& w) 
    :_w(w._w)
    {
        cout << "W(const W& w)" << endl;
    }
    //析构函数
    ~W(){
        cout << "~W()" << endl;
    }
private:
    int _w;
};
void func(const W w) {
    
}
int main()
{
    W w1=1;  //构造
    func(w1);   //拷贝构造:把w1的值拷贝一份,传到形参
    return 0;
}

调用情况我们打印出来:

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值