Re: ссыльный тип
От: Bell Россия  
Дата: 13.04.10 02:52
Оценка: 1 (1) :)))
Здравствуйте, wobist, Вы писали:

W>X x;

W>static_cast<T>(х)
W>static_cast<T &>(х)
W>Разные ли это преобразования?
Да, разные. В первом случае результат преобразования — это rvalue (скорее всего, потребуется конструирование временного объекта), во втором — lvalue.

W>...для X — базового, дочернего от Т типа

Проникнуть в смысл этой фразы у меня не получается
Любите книгу — источник знаний (с) М.Горький
ссыльный тип
От: wobist  
Дата: 12.04.10 22:33
Оценка: :))) :)
X x;
static_cast<T>(х)
static_cast<T &>(х)
Разные ли это преобразования? для X — базового, дочернего от Т типа
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>
Перекуём баги на фичи!
Re[2]: ссыльный тип
От: wobist  
Дата: 13.04.10 11:59
Оценка:
W>>потребуется конструирование временного объекта
На этапе компиляции?

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

struct X1 {};
struct X2: public X1 {};
X1 x1;
X2 x2;
//что правильно
x1 = static_cast<X1>(x2);//или
x1 = static_cast<X1 &>(x2);

static_cast<X1>(x2) = x1;//или
static_cast<X1 &>(x2) = x1;
Re: ссыльный тип
От: jazzer Россия Skype: enerjazzer
Дата: 14.04.10 08:26
Оценка:
Здравствуйте, wobist, Вы писали:

"ссыльный" — это которого в ссылку отправили.

Обычно говорят "ссылочный тип".
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.