Функция as_const
Функция as_const принимает объект и возвращает
константную ссылку на него. Для вектора это означает,
что вы получаете доступ к элементам только для чтения.
В первый параметр мы передаем сам вектор, а функция
возвращает const std::vector<T>&. Это удобно
при передаче вектора в функции, которые не должны
изменять его содержимое.
Синтаксис
std::as_const(vec)
Пример
Давайте создадим вектор с числами и приведем его
к константной ссылке с помощью as_const,
чтобы убедиться, что размер и элементы доступны
только для чтения:
#include <iostream>
#include <vector>
#include <utility>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
const auto& cvec = as_const(vec);
cout << cvec.size() << endl;
cout << cvec[0] << endl;
return 0;
}
Результат выполнения кода:
5
1
Пример
Функция as_const полезна при передаче вектора
в шаблонные функции, где важно избежать случайного
изменения данных. Попробуем изменить элемент через
константную ссылку - компилятор выдаст ошибку:
#include <iostream>
#include <vector>
#include <utility>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
const auto& cvec = as_const(vec);
// cvec[0] = 10; // ошибка: нельзя изменить
cout << cvec.back() << endl;
return 0;
}
Результат выполнения кода:
5