在继承std::vector的类中使用操作符[]

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

本文关键字:操作符 继承 std vector      更新时间:2023-10-16

不工作

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]返回类型A而不是int的对象非常奇怪,就像at(0)一样。在这个例子中,它们不应该以同样的方式工作吗?

错误信息泄露:

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

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

你想:

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

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

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

,但我建议使用括号。