C ++如何通过operator []工作

时间:2015-08-12 10:07:39

标签: c++ operator-overloading operators overloading

我有这段代码:

#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;
}

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

1 个答案:

答案 0 :(得分:1)

首先考虑一个简单的程序

#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;
}

现在&#34; = 10&#34;转到a.x因为operator []返回对a.x的引用。

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

当然你可以写

a[0] = 10; 

效果将是相同的,因为在任何情况下a[0](您可以在此使用任何整数而不是0; 0仅用于展示)返回对a.x的引用。

相对于你的代码片段= 3进入操作员调用

a.operator []( 5 )

指的是。

在我的示例中,它引用结构A的数据成员x。在您的示例中,它是未知的,因为您没有显示运算符的返回引用类型所引用的运算符的定义。