C++ 为什么可以';t我使用“-&燃气轮机&引用;加上;这";及;[]是什么;?

C++ 为什么可以';t我使用“-&燃气轮机&引用;加上;这";及;[]是什么;?,c++,oop,pointers,C++,Oop,Pointers,我在玩组合,在我的一个类中,我有一个围绕下标操作符“[]”(来自std::vector)的包装器。然而,当我说this->[I]时,编译器(g++)会生气。我用(*this)[I]来解决这个问题,但我认为这些是同义词。我错过了什么?下面是一个抛出错误的小示例代码(我故意避免使用newmethod中的迭代器,只是为了简单地说明我的问题) #包括 #包括 甲级{ 私人: std::向量rep; 公众: std::size_t size(){return rep.size();} int&运算符[](

我在玩组合,在我的一个类中,我有一个围绕下标操作符“[]”(来自std::vector)的包装器。然而,当我说
this->[I]
时,编译器(g++)会生气。我用
(*this)[I]
来解决这个问题,但我认为这些是同义词。我错过了什么?下面是一个抛出错误的小示例代码(我故意避免使用
newmethod
中的迭代器,只是为了简单地说明我的问题)

#包括
#包括
甲级{
私人:
std::向量rep;
公众:
std::size_t size(){return rep.size();}
int&运算符[](std::size_t index){return rep[index];}
void newmethod();
A(大小n,int m):rep(n,m){
};
void A::newmethod(){
对于(std::size_t i=0;i<(this->size());++i){

std::cout
a->b
相当于
(*a).b
。当你说
a->[b]
并将其翻译成
(*a),[b]

a->b
相当于
(*a).b
。当你说
a->[b]/code>并将其翻译成
(*a)时,你预计会发生什么

这是不正确的,如果我们看一下,我们可以看到
E1->E2
相当于
(*(E1)).E2
而不是
(*E1)E2
,这在
5.2.5
类成员访问第2段中介绍:

[…]表达式E1->E2转换为等价形式(*(E1)).E2;[…]

因此,接下来的
->
必须是类(或基类)的成员,因此在这种情况下,应该是
操作符[]

this->operator[](i)
this->operator[](i)

这是不正确的,如果我们看一下,我们可以看到
E1->E2
相当于
(*(E1))。E2
而不是
(*E1)E2
,这在
5.2.5
类成员访问第2段中介绍:

[…]表达式E1->E2转换为等价形式(*(E1)).E2;[…]

因此,接下来的
->
必须是类(或基类)的成员,因此在这种情况下,应该是
操作符[]

this->operator[](i)
this->operator[](i)

您必须直接调用
操作符[]
成员函数,例如:


您必须直接调用
操作符[]
成员函数,例如: