在 std::array 中重载运算符 []
Overload operator[] in std::array
我想优化我的代码,重载 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;
}
代码 returns“1”,但我希望是“0”。
提前致谢!
您不是您阵列的 "overloading" 订阅运营商 []
;您宁愿为 class A
定义自己的订阅运算符,它将在 A
的实例上调用,但不会在 A 的数据成员 var
.[=16 的实例上调用=]
所以你需要写...
std::cout << a[1] << std::endl;
输出:
0
我想优化我的代码,重载 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;
}
代码 returns“1”,但我希望是“0”。 提前致谢!
您不是您阵列的 "overloading" 订阅运营商 []
;您宁愿为 class A
定义自己的订阅运算符,它将在 A
的实例上调用,但不会在 A 的数据成员 var
.[=16 的实例上调用=]
所以你需要写...
std::cout << a[1] << std::endl;
输出:
0