On 6/5/22 14:04, Alain De Vos wrote:
> Could it be the copy constructor is only called during assignments (like
> C++).

The assignment operator is used during assignments both in C++ and D.

A confusion comes from the fact that construction uses the same operator as assignment:

  a = b;  // Assignment because 'a' already exists

  auto c = b; // Copy construction because 'c' is being constructed

> And for one, two there is an explicit assignment.

Actually, both are copy construction:

  Foo one = Foo(1), two = 2;

You will never find me write code like because it's unclear. My version would be the following:

  Foo one = Foo(1);
  Foo two = 2;

But even that is not my style because the first line repeats Foo and the second line hides the fact that there is construction. So, this is what I write in my programs:

  auto one = Foo(1);
  auto two = Foo(2);

> But not for three where there is a conversion ?

There are two "three"s in that code. The first one is construction (not copy):

  [one, two, Foo(3)]

And the other one is copy construction:

  auto three = ++two;

'two' is first incremented and then a copy is made from 'two's new state.

Ali

Reply via email to