ссылка — В действующем пункте C ++ 3 зачем использовать static_cast & lt; const TextBlock & amp; & gt; (* this) вместо static_cast & lt; const TextBlock & gt; (* this)?

Я читаю Скотта Мейерса Effective C ++ 3-ий.
В пункте 3:

Используйте const всякий раз, когда это возможно. Чтобы использовать оператор функции-члена const [], оператор функции-неконста [] должен выполнить 2 операции приведения:

const_cast<char&>(
static_cast<const TextBlock&>(*this)
[position]
)

Почему Скотт Мейерс использует static_cast<const TextBlock&>(*this) вместо static_cast<const TextBlock>(*this)?

3

Решение

static_cast<const TextBlock>(*this) создаст временный объект, который копируется из *this, А потом operator[] будет вызван на него, а возвращенный char& будет зависать при выходе из неконстантной функции-члена operator[], Обратите внимание, что разыменование на нем приводит к UB.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector