繁体   English   中英

在std :: array中重载operator []

[英]Overload operator[] in std::array

我想优化我的代码重载std :: array中的bracket []运算符,我在任何地方都减去一个。 代码编译但从不调用重载函数,任何人都可以告诉我为什么?

#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”。 提前致谢!

您没有为您的阵列“重载”订阅运算符[] ; 您宁愿为A类定义自己的订阅运算符,它将在A实例上调用,但不在A的数据成员var实例上调用。

所以你需要写...

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

输出:

0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM