C++ 如何通过 operator[] 进行编写

C++ how writing through operator[] works

我有这个代码:

#include <iostream>
using namespace std;

class A
{
public:
    int& operator[](int index)
    {
        //Do something and return
    }
};
int main(void) {
    A a;
    a[5] =3;//here
    return 0;
}

我想知道 this =3 去哪里,我知道 5 去函数中的索引,但是 this =3;去,它不能激活 operator= 肯定因为我没有对话 c'tor。任何人都可以向我解释它是如何工作的,我很感激。

首先考虑一个简单的程序

#include <iostream>

int main()
{
    int x;
    int &r = x;

    r = 10;

    std::cout << "x = " << x << std::endl;
}

此处 = 10 转到 x 因为 r 被声明为对 x

的引用

现在考虑另一个简单的程序

#include <iostream>

struct A
{
    int x;
    int & operator []( int i ) { return x; }
};

int main()
{
    A a;
    int &r = a[0];

    r = 10;

    std::cout << "a.x = " << a.x << std::endl;
}

现在“=10”转到 a.x 因为运算符 [] return 引用了 a.x

    int & operator []( int i ) { return x; }
    ^^^^^                               ^^^

当然你可以只写

a[0] = 10; 

效果是一样的,因为在任何情况下a[0](您可以在这里使用任何整数代替 0;0 仅用于说明)returns 引用 a.x.

相对于您的代码片段 =3 转到操作员调用的内容

a.operator []( 5 )

指.

在我的示例中,它指的是结构 A 的数据成员 x。在您的示例中,它是未知的,因为您没有说明运算符是如何定义的,即 return 引用类型所引用的运算符运算符。