Оператор перегрузки [] в std :: array - PullRequest
0 голосов
/ 08 января 2019

Я хотел бы оптимизировать мой код, перегружая оператор скобки [] в std :: array, который я использую везде, вычитая один. Код компилируется, но никогда не вызывает перегруженную функцию, может кто-нибудь сказать мне, почему?

#include <iostream>
#include <array>
class A
{
    std::array<int,5> var{0, 1, 2, 3, 4};
    std::array<int, 5ul>::value_type& operator[](std::size_t p_index);
};

std::array<int, 5ul>::value_type& A::operator[](std::size_t p_index)
{
    return var[p_index - 1];
}

int main()
{
    A a;
    std::cout << a.var[1] << std::endl;
}

Код возвращает «1», но я ожидаю «0». Заранее спасибо!

1 Ответ

0 голосов
/ 08 января 2019

Вы не «перегружаете» оператор подписки [] для своего массива; вы скорее определяете свой собственный оператор подписки для класса A, который будет вызываться для экземпляров A, но не для экземпляров элемента данных A var.

Так что вам нужно написать ...

std::cout << a[1] << std::endl;

Выход:

0
...