在std :: array

时间:2019-01-08 09:56:15

标签: c++ operator-overloading stdarray

我想优化我的代码,使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 :(得分:9)

您不是阵列的“超载”订阅运算符[];您只是为类A定义了自己的订阅运算符,该订阅运算符将在A的实例上调用,但不会在A的数据成员var的实例上调用。

所以你需要写...

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

输出:

0