Я подумал, что попробую улучшить свои C ++ и OpenGL, взглянув на недавно выпущенный исходник Doom 3. До сих пор многому научился, но я врезался в стену. Класс подробный здесь имеет методы
float operator[] (int index) const
и
float & operator[] (int index)
чьи тела читают
return ( &x )[ index ];
где x
- это один из двух элементов данных класса (другой является y
; этот класс для 2-векторов).
Хотя я могу понять синтаксис заголовка / прототипа каждой версии, я не понимаю, почему они оба присутствуют.
const
, кажется, появляется (или не появляется, как предпочитается) только для того, чтобы различать заголовки в достаточной степени, чтобы позволить компиляцию. (То есть, удалить const
и VS2010 отказывается компилировать, аналогично, если оба заголовка заканчиваются на const
.)
А зачем возвращать ссылку на поплавок? Ни один из семи других методов класса не делает этого, поэтому я предполагаю, что эффективность не имеет значения (хотя, может быть, этот оператор вызывается гораздо чаще, чем другие).
Ценю любое понимание того, что здесь происходит ...