C++返回局部对象并使用时,并没有调用赋值运算符函数或拷贝构造函数

可以看出只要是返回局部对象(返回匿名对象也一样),如果将它赋值给对象,或者是将它作为拷贝构造函数的参数,都不会调用你以为的那个函数。
…………至于为什么改日再究。

# include <iostream>

using namespace std;

struct Data{
    int a;

    Data(){
        cout << "无参构造函数\n";
    }
    Data(int b){
        this->a = b;
        cout << "一参构造函数\n";
    }

    Data(const Data &ob){
        cout << "拷贝构造函数\n";
    }

    Data & operator=(const Data & rhs){
        cout << "赋值运算符函数\n";
        return *this;
    }

    ~Data(){
        cout << "析构函数\n";
    }
};


Data f(){
    cout << "in f()\n"; 
    return Data();  // 输出:无参构造函数
}

Data g(){
    Data a;  // 输出:无参构造函数
    cout << "in g()\n";
    return a;  // 无输出
}

void test1(){
	cout << "-----------------\n";
    Data a;
    cout << "-----------------\n";
    Data b(a);  // 调用拷贝赋值函数
    cout << "-----------------\n";
}
void test2(){
	cout << "-----------------\n";
    Data a;
    cout << "-----------------\n";
    Data b(f());  // 不调用拷贝赋值函数
    cout << "-----------------\n";
}
void test3(){
	cout << "-----------------\n";
    Data a;
    cout << "-----------------\n";
    Data b(g());  // 不调用拷贝赋值函数
    cout << "-----------------\n";
}
void test4(){
	cout << "-----------------\n";
    Data a;
    cout << "-----------------\n";
    Data b = f();  // 调用拷贝赋值函数(g也是一样的)
    cout << "-----------------\n";
}
int main()
{
	test1();
	test2();
	test3();

    return 0;
}

Data b(a);
1


Data b(f());
2


Data b(g());
3


b = f();4

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值