如何支持(a = b)= c?

时间:2011-08-09 17:58:04

标签: c++

问题1>以下代码含义是什么以及赋值顺序是什么?

ClassName a1, a2, a3;
a1 = a2 = a3;

首先将a3的值分配给a2然后分配?到a1。

问题2>以下代码含义是什么?

ClassName a1, a2, a3;
(a1 = a2) = a3;

问题3> 鉴于如下课程:

class A
{
   ...
}

为了支持以下操作,必须定义哪些运算符?

A a1, a2, a3;
(a1 = a2) = a3;

2 个答案:

答案 0 :(得分:9)

问题1

此:

a1 = a2 = a3;

相当于:

a1 = (a2 = a3);

对于原始类型或POD,这相当于:

a2 = a3;
a1 = a2;

对于用户定义的类型,它等同于:

a1.operator=(a2.operator=(a3));

如果你没有定义自己的operator=重载,那么这与基元类型相同。

问题2

此:

(a1 = a2) = a3;

仅适用于用户定义的类型。它相当于:

a1.operator=(a2).operator=(a3);

如果使用编译器提供的运算符,则相当于:

a1 = a2;
a1 = a3;

问题3

不需要定义运算符,因为如果您不编写自己的运算符,编译器会提供复制赋值运算符实现。

答案 1 :(得分:3)

问题1:

评估顺序从右到左执行,因此a1 = a2 = a3相当于a2 = a3; a1 = a2;

问题2:

如果operator=尚未重新定义,则表示a1 = a3

问题3:

没什么,它按原样运作。