copy on write

88888 Dihedral dihedral88888 at googlemail.com
Thu Feb 2 08:33:17 EST 2012


在 2012年1月14日星期六UTC+8上午6时48分29秒,Evan Driscoll写道:
> On 01/13/2012 03:20 PM, Neil Cerutti wrote:
> > They perform the same action, but their semantics are different.
> > operator+ will always return a new object, thanks to its
> > signature, and operator+= shall never do so. That's the main
> > difference I was getting at.
> 
> I was talking about the combination of + and =, since the discussion is 
> about 'a = a + b' vs 'a += b', not 'a + b' vs 'a += b' (where the 
> differences are obvious).
> 
> And I stand by my statement. In 'a = a + b', operator+ obviously returns 
> a new object, but operator= should then go and assign the result to and 
> return a reference to 'a', just like how 'a += b' will return a 
> reference to 'a'.
>

The operation a+b means add(a,b) and returns a result instance, furthermore a and b can't be modified.

The expression a = a+b are two operations not one. But in C or C++ the  problem is mixing operations and expressions in a free style allowed.
 
The operation a+=b means a modified by b and b can't be changed.
Note that no new instance is necessary in a+=b.
 
 

> If you're working in C++ and overload your operators so that 'a += b' 
> and 'a = a + b' have different observable behaviors (besides perhaps 
> time), then either your implementation is buggy or your design is very 
> bad-mannered.
> 
> Evan

Do you mean the result instances after 'a+=b' and 'a=a+b' or 
the actions of behaviors of instances involved  in performing 'a+=b' and 'a=a+b'?



More information about the Python-list mailing list