2013-03-16 3 views
1

Я новичок на C++. Поэтому, пожалуйста, несите меня. Я изучал реализацию класса std::vector. Я нашел следующие 2 различные реализации метода begin(). Я понимаю, что первый возвращает RW-итератор, а второй возвращает итератор только для чтения. Я думал, что простое отличие в обратном типе недостаточно для перегрузки функций. Как это работает?C++ const iterator in Vector

iterator 
begin() 
{ return iterator(this->_M_impl._M_start); } 

const_iterator 
begin() const 
{ return const_iterator(this->_M_impl._M_start); } 
+3

Один из них 'const', другой нет. Этого достаточно для перегрузки. – Mat

+0

Это стандартная библиотека, [не STL] (http://kera.name/articles/2010/08/it-is-not-called-the-stl-mmkay/). Вы можете просто обратиться к 'std :: vector'. – Angew

+0

Изменено для std:; vector – codefx

ответ

2

Один - const, а другой нет. Версия const будет вызываться для const std::vector объектов, а другая для неконстантных std::vector объектов. Также обратите внимание, что это также относится к const и неконтинентным ссылкам и указателям.

Более подробную информацию о const методов и перегрузки:

Также актуальны:

0

Неявный параметр «this» является константой во втором методе. Этого достаточно, чтобы отличить их при перегрузке.