Эффективно const_cast-постоянный опорный параметр - PullRequest
7 голосов
/ 04 ноября 2011

У меня есть функция-член, которая принимает постоянный ссылочный параметр для другого объекта. Я хочу const_cast этот параметр, чтобы легко использовать его внутри функции-члена. Для этого какой из следующих кодов лучше?:

void AClass::AMember(const BClass & _BObject)
{
    // FORM #1 - Cast as an object:
    BClass BObject = const_cast<BClass &>(_BObject);
    // ...
}

void AClass::AMember(const BClass & _BObject)
{
    // FORM #2 - Cast as a reference:
    BClass & BObject = const_cast<BClass &>(_BObject);
    // ...
}

Можете ли вы сравнить эти две формы? Какой из них лучше по критериям скорости и использования памяти?

Ответы [ 2 ]

13 голосов
/ 04 ноября 2011

Первая версия делает копию объекта.Вторая версия не делает.Поэтому вторая версия будет быстрее, если вы не захотите сделать копию.

Кстати, все идентификаторы, которые начинаются со знака подчеркивания, за которым следует заглавная буква, зарезервированы для использования компилятором.Вы не должны использовать имена переменных, такие как _BObject.

10 голосов
/ 04 ноября 2011

Первый не имеет никакого смысла, поскольку вы отбрасываете константу _BObject, чтобы только позже передать ее как постоянную ссылку на конструктор BClass и создать копию BObject.Второй делает то, что он означает - отбрасывает постоянство и сохраняет ссылку на исходный объект.Так что, если вы спросите меня, второй лучше.Имейте в виду, что const_cast не всегда безопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...