首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么一个语句调用复制构造函数,而另一个调用调用复制赋值操作符?

为什么一个语句调用复制构造函数,而另一个调用调用复制赋值操作符?
EN

Stack Overflow用户
提问于 2022-02-22 05:45:14
回答 1查看 42关注 0票数 2
代码语言:javascript
运行
复制
#include<bits/stdc++.h>
using namespace std;


class numbered{
    public:
        int value;
        numbered(){}
        numbered& operator= (const numbered& n){
            this->value=n.value+1;
            return *this;
        }
        numbered (const numbered& n){
            this->value=n.value+2;
        }
};


int main(void){
    numbered n1;
    n1.value=15;
    numbered n2=n1;
    numbered n3;
    n3=n1;
    cout << n2.value <<endl;
    cout << n3.value <<endl;

    return 0;
}

在此代码段之上,为什么numbered n2=n1调用复制构造函数而numbered3 n3;n3=n1;调用复制赋值操作符.n2和n3这两个变量都由=分配。那么,它们之间有什么区别呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-22 05:50:57

报表1

当你写到:

代码语言:javascript
运行
复制
numbered n2 = n1; //this is initialization and so this uses copy constructor

上面的语句是使用变量initialization的变量n2n1。来自复制构造函数的文档

每当一个对象被初始化为(通过直接初始化或复制初始化)来自同一类型的另一个对象时,就调用复制构造函数.

由于在本例中我们正在进行初始化,因此根据上面引用的语句,这将使用复制构造函数。

报表2

另一方面,当你写道:

代码语言:javascript
运行
复制
n3=n1; //this is assignment expression and so this uses copy assignment operator

上面的语句是赋值 of n1 to n3。来自副本分配操作员的文件

每当通过过载解析选择复制赋值操作符时,都会调用该操作符,例如,当一个对象出现在赋值表达式的左侧时,即为。

由于对象n3出现在赋值表达式的左侧,因此根据上面引用的语句,这将使用复制赋值操作符。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71216428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档