Почему это задание после кастинга не работает? [Дубликат]

target = элемент, который вызвал событие.

currentTarget = элемент, который прослушивает событие.

16
задан Rob Kennedy 31 January 2012 в 20:31
поделиться

4 ответа

Поскольку этот код просит создать новый объект. Этот код хочет сделать объект Window из *this - это можно сделать с помощью конструктора копирования в Window.

Вместо этого вы хотите:

static_cast<Window&>(*this).onResize(); 
//                ^
//                note the &

Это означает, что я хочу сделать Window& из *this - это неявное преобразование из [] [] [*this) [SpecialWindow&) к Window&.

Однако лучше всего вызвать определенную версию функции-члена onResize(), которую вы хотите вызвать:

Window::onResize(); // equivalent to this->Window::onResize();
28
ответ дан sbi 17 August 2018 в 21:52
поделиться

Это потому, что код отличает значение Window вместо ссылки Window&. Согласно стандарту эта форма литья эквивалентна вызову (C ++ 11 §5.2.9 / 4 = C ++ 03 §5.2.9 / 2)

Window __t (*this);
__t.onResize();

, который вызывает копию -constructor Window и выполняет onResize на этой копии.

(Правильный способ вызова метода суперкласса -

Window::onResize();

)

7
ответ дан kennytm 17 August 2018 в 21:52
поделиться

Поскольку вы выполняете фактический объект, а не указатель или ссылку. Точно так же при нажатии double на int создается новый int - не повторное использование части double.

2
ответ дан Krizz 17 August 2018 в 21:52
поделиться

Контраст:

static_cast<Window>(*this)

с:

static_cast<Window&>(*this)

Один вызывает конструктор копирования, другой - нет. Это помогает?

1
ответ дан mcmcc 17 August 2018 в 21:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: