2016-05-30 2 views
5

Подписи оператора std::string::operator[] являются:Зачем возвращать константную ссылку для базового типа? (Станд :: строка :: оператор [])

char& operator[] (size_t pos); 
const char& operator[] (size_t pos) const; 

Почему константной версии возврата const char&, а не только char?

+5

Потому что так '& s [i] + i == & s [i + 1]'. –

ответ

6

Поскольку цель объекта const заключается в том, что его нельзя изменить. Если член класса const в этом случае возвращает изменчивую ссылку на символ в строке, вы можете ее изменить.

Теперь, что касается operator[], это потому, что вы можете использовать оператор &, чтобы получить указатель на него. В конце концов, что-то вроде этого является довольно распространенным явлением:

auto *foo=&bar[baz]; 

Вы не могли бы сделать это с простым типом возвращаемого Rvalue. По крайней мере, вы можете получить указатель const, в данном случае.

+2

ОП задал вопрос о 'const char &' vs 'char' (а не' char & ') (т. Е. Почему не' char' для перегрузки const), правильно? –

+0

@JamesAdkison Пропустили ли вы объявление 'const'? –

+0

Да, я почти пропустил эту часть и обновил свой ответ. –

Смежные вопросы