在继承std::vector的类中使用操作符[]
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]
返回类型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);
,但我建议使用括号。
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- c++类继承和赋值操作符
- 带有抽象继承的后缀操作符++
- 带有继承的c++操作符重载
- 在继承std::vector的类中使用操作符[]
- 前缀和后缀操作符继承
- 是否可以继承赋值操作符?
- c++如何继承返回特定类型的操作符
- c++中操作符的继承
- 在抽象类层次结构中操作符=的复杂继承
- 继承类的操作符重载
- 通过继承专门化操作符模板
- c++,通过指针传递泛型数组,继承,错误:没有接受右操作数的操作符
- c++赋值操作符关于继承的问题