Почему есть постоянные и неконстантные методы доступа?

Почему контейнеры STL определяют константные и неконстантные версии методов доступа?

В чем преимущество определенияconst T& at(unsigned int i) const а такжеT& at(unsigned int) и не только неконстантная версия?

 underscore_d21 нояб. 2017 г., 10:52

Ответы на вопрос(1)

Решение Вопроса

at наconst векторный объект

Если бы у вас был толькоconst версия, следующая:

const std::vector<int> x(10);
x.at(0);
</int>

не будет компилироваться. Имеяconst версия делает это возможным, и в то же время не позволяет вам реально изменить то, чтоat возвращает - что по контракту, так как вектор.const

Затем на-const версия может быть вызвана наconst объект и позволяет вам изменить возвращенный элемент, который также действителен, потому что вектор не 'т конст.

const std::vector<int> x(10);
      std::vector<int> y(10);

int z = x.at(0);          //calls const version - is valid
x.at(0) = 10;             //calls const version, returns const reference, invalid

z = y.at(0);              //calls non-const version - is valid
y.at(0) = 10;             //calls non-const version, returns non-const reference
                          //is valid
</int></int>

Ваш ответ на вопрос