在继承 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);
但我建议使用括号。
不起作用
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);
但我建议使用括号。