在继承 std::vector 的 class 中使用 operator[]

Use operator[] inside class that inherits std::vector

不起作用

class A : public std::vector<int>
{
    explicit A()
    {
        push_back(5);
        std::cout << *this[0]; 
    }
}

error: no match for 'operator*' (operand type is 'A')
std::cout << *this[0];'

*this[0] 替换为 at(0) 可以使其正常工作。我发现 *this[0] returns 是 A 类型的对象而不是 int 类型的对象,就像 at(0) 那样。在此示例中,它们不应该以相同的方式工作吗?

错误信息泄露:

error: no match for 'operator*' (operand type is 'A')

A 从何而来? this 是一个 A* const,从指针获取对象的方法是取消引用 - 所以那是 this[0].

你想要:

std::cout << (*this)[0]; 

operator[]precedence 高于解引用 - 您需要确保 *this 先发生。当然,你也可以这样乱写:

std::cout << this->operator[](0);

但我建议使用括号。