Re[3]: ссыльный тип
От: Кодт Россия  
Дата: 13.04.10 12:23
Оценка: 1 (1)
Здравствуйте, wobist, Вы писали:

W>>>потребуется конструирование временного объекта

W>На этапе компиляции?

На этапе компиляции никаких объектов нет — ну, кроме интегральных констант.


B>>Проникнуть в смысл этой фразы у меня не получается

W>
struct X1;
struct X2;

struct X1
{
  X1()          { cout << "X1::default ctor()" << endl; }
  X1(const X1&) { cout << "X1::copy ctor(X1)" << endl; }
  X1(const X2&) { cout << "X1::user ctor(X2)" << endl; } // если его нет, будет срезка источника и copy ctor

  void operator=(const X1&) { cout << "X1::copy assign(X1)" << endl; }
  void operator=(const X2&) { cout << "X1::user assign(X2)" << endl; }
};

struct X2 : X1
{
  X2()          { cout << "X2::default ctor()" << endl; }
  X2(const X2&) { cout << "X2::copy ctor(X2)" << endl; }
  X2(const X1&) { cout << "X2::user ctor(X1)" << endl; }

  void operator=(const X2&) { cout << "X2::copy assign(X2)" << endl; }
  void operator=(const X1&) { cout << "X2::user assign(X1)" << endl; }
};


W>X1 x1; // X1::default ctor()
W>X2 x2; // X2::default ctor()

W>x1 = static_cast<X1>(x2);
// X1::user ctor(X2) либо неявная срезка и X1::copy ctor(X1); создали временный объект-источник
// X1::copy assign(X1)
W>x1 = static_cast<X1 &>(x2);
// X1::copy assign(X1) - явная срезка источника

W>static_cast<X1>(x2) = x1;
// X1::user ctor(X2) либо X1::copy ctor(X1) - создали временный объект-приёмник
// X1::copy assign(X1)
W>static_cast<X1 &>(x2) = x1;
// X1::copy assign(X1) - явная срезка приёмника
W>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.