我想优化我的代码,使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”。 预先感谢!
答案 0 :(得分:9)
您不是阵列的“超载”订阅运算符[]
;您只是为类A
定义了自己的订阅运算符,该订阅运算符将在A
的实例上调用,但不会在A的数据成员var
的实例上调用。
所以你需要写...
std::cout << a[1] << std::endl;
输出:
0