Возврат константного элемента в перегрузке - PullRequest
0 голосов
/ 14 января 2012

Меня попросили в классе, который я беру, чтобы перегрузить [] и вернуть как постоянный, так и неконстантный символ:

char * data_;
char & operator [] (size_t index);
const char & operator [] (size_t index) const;

У меня одинаковая реализация для обоих, и он компилируется, но я почти уверен, что чего-то здесь не хватает:

const char & Array::operator [] (size_t index) const
{
    return data_[index]; // todo: needs to be const?
}

Как я могу убедиться, что возвращаемый символ не может быть изменен?

1 Ответ

2 голосов
/ 14 января 2012

Как я могу убедиться, что возвращаемый символ не может быть изменен?

const в типе возврата, const char&, гарантирует, что символ не может быть изменен через возвращаемую ссылку.


Обратите внимание, однако, что может быть предпочтительнее вместо этого возвращать char (то есть, char по значению, а не ссылку на const char). Возвращение константной ссылки полезно, когда у вас есть большой объект (потому что вы можете избежать копирования большого количества байтов во многих случаях) или в общем коде (потому что вы не знаете размер всех типов, которые могут отображаться), но при возврате чего-то, что известно как маленькое (вещи не становятся меньше, чем char), вы можете просто вернуть это значение.

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