gpt4 book ai didi

c++ - 赋值运算符

转载 作者:行者123 更新时间:2023-11-27 23:11:26 25 4
gpt4 key购买 nike

赋值运算符的工作原理有点不明白,请看这段代码:

#include <iostream>
using namespace std;

class foo
{
int val{};
public:
foo()
{
}
foo( int n )
{
val = n;
cout<<"Constructor"<<endl;
}
foo( const foo& f )
{
cout<<"Copy constructor, val "<<endl;
val = f.val;
}

foo( const foo&& f )
{
cout<<"Copy constructor -rvalue-"<<endl;
val = f.val;
}
foo operator+( const foo& other ) const
{
cout<<"Sum "<<endl;
foo foo2;
foo2.val = val + other.val;
return foo2;
}
foo& operator=( const foo& f )
{
cout<<"Assignment operator\n";
val = f.val;
return *this;
}
foo& operator=( const foo&& f)
{
cout<<"Assignment operator, r-value\n";
val = f.val;
return *this;
}
~foo() {}
};

int main()
{
foo a{1}, b{5}, c{4};
foo d;
d = a + b + c;
foo d2 = a + b + c;
return 0;
}

这个应用程序的输出是:

Constructor
Constructor
Constructor
Sum
Sum
Assignment operator, r-value
Sum
Sum

我不清楚的是为什么第二个赋值触发没有赋值运算符。第一个赋值是在一个通过默认构造构造的对象上进行的,然后一个简单的赋值操作是可见的,在第二个赋值中,一个临时对象应该由编译器构建然后分配给 d2,但是从任何一个中都看不到打印提供的赋值运算符。为什么?

谢谢

最佳答案

没有第二次赋值,您的代码只有一次赋值。线路

foo d2 = a + b + c;

是复制初始化。

关于c++ - 赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20035242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com