Я хотел бы понять проблему со следующим кодом. Он компилируется, но не работает должным образом.
#include <iostream>
#include <vector>
class A
{
public:
std::vector<int> getVector() { return m_vector; }
std::vector<int> m_vector = {1, 2, 3};
};
int main()
{
A objA;
for(int i = 0; i < objA.getVector().size(); i++)
{
int &item = objA.getVector().at(i);
std::cout << "\nvector item: " << item;
}
return 0;
}
Вывод:
- векторный элемент: 0
- векторный элемент: 0
- векторный элемент: 3
Ожидаемый результат:
- векторный элемент: 1
- векторный элемент: 2
- векторный элемент: 3
Я понимаю, что нет необходимости объявлять элемент как ссылку, но я хотел бы понять проблему, которая возникает после этого таким образом.
Я думаю, что проблема в том, что элемент ссылки ожидает lvalue, а метод std :: vector :: at возвращает ссылку. Поскольку возвращаемый тип метода std :: vector :: at равен int & , компиляция не выдает никакой ошибки, но тогда результат не соответствует ожидаемому.
Можно ли подтвердить, что это проблема, и я больше ничего не пропускаю?