c++中,为什么在调用赋值操作符时同时会调用复制构造函数?

例如定义了类classNoNmae,同时在类中定义了复制构造函数,默认构造函数和赋值操作符,NoNamea,b;a=b;在执行a=b;语句时同时调用了赋值操作符和复制构造... 例如定义了类 class NoNmae ,同时在类中定义了复制构造函数,默认构造函数 和 赋值操作符,
NoName a, b;
a=b;
在执行a=b;语句时同时调用了赋值操作符和复制构造函数,为什么不是只调用赋值操作符呢?
展开
 我来答
ljt20061908
2013-08-28 · TA获得超过1033个赞
知道小有建树答主
回答量:527
采纳率:87%
帮助的人:203万
展开全部
说说我的理解:
NoName a, b;//此处调用了构造函数
a=b;//此处a对象调用的赋值构造函数,且只调用了一次赋值构造函数。你可以去测(当然如果你赋值构造函数参数不是引用的话,肯定就得b对象拷贝构造一次了)。
追问
谢谢,我的赋值操作符函数直接返回类型了, 没有返回引用,导致多调用一次复制构造函数。
yuantailing
2013-08-28 · TA获得超过2545个赞
知道小有建树答主
回答量:1167
采纳率:92%
帮助的人:662万
展开全部

明明没有调用复制构造函数。编译运行以下测试程序:

#include <iostream>
#include <cstdlib>
using namespace std;

class A{
public:
    A(){cout<<"A::A()"<<endl;}
    A(A&){cout<<"A::A(A&)"<<endl;}
    A& operator=(A&){cout<<"operator=(A&)"<<endl;return *this;}
};

int main()
{
    A a,b;
    a=b;
    system("pause");
    return 0;
}

结果是(在Dev-Cpp 4.9.9.2上编译的结果):

A::A()

A::A()

operator=(A&)

证明没有调用A::A(A&)

追问
你好,我的程序私信给你了,是不是我的程序有问题
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式