Boost logo

Boost :

Subject: Re: [boost] [string] proposal
From: Dean Michael Berris (mikhailberis_at_[hidden])
Date: 2011-01-21 14:40:44

On Sat, Jan 22, 2011 at 3:18 AM, Dave Abrahams <dave_at_[hidden]> wrote:
> At Sat, 22 Jan 2011 01:56:36 +0800,
> Dean Michael Berris wrote:
>> No changing arbitrary content in the string. Concatenation is a
>> process of creating new strings.
> But you're allowing assignment.  That's not acting "as if it's const,
> with no way to modify the string"

Unless you frame assignment in terms of a "move".

  x = "This is the original";
  x = "Not anymore";

What's happening here is that you're really making x refer to a
different string. In essence, x is what you might call a proxy. You
can change what the proxy refers to, but what it refers to you cannot
change -- if that makes any sense. If you're reading or dealing with
x, basically you're dealing with the proxy.

So when you're doing concatenation, what's really happening is you're
building a new string and making the proxy refer to that new string.

  x = "Hello,";
  x = x ^ " World!";

Note this doesn't violate the value semantics of the object much like
how pointers provide value semantics (because they are values).

Dean Michael Berris

Boost list run by bdawes at, gregod at, cpdaniel at, john at