2

我进行了大量搜索并找到了大量示例和教程,但仍然无法弄清楚如何在写入[]操作员时获取值......

我觉得我快疯了。我一定错过了一些非常简单的东西

据我所知,and 有一个函数getset它看起来像这样:

V& operator[](string K);

或这个:

double &operator[](int n);

现在太好了,我们可以得到:

a[HERE] 

就这样,我们HERE可以double &operator[](int HERE); 轻松地使用它

但我们如何得到什么是:

a[4] = HERE

C# 有两个非常明确的 get 和 set 方法,其中 value 关键字表示正在分配的对象。

public string this[int key]
{
    get
    {
        if(key == 1)
           return "1!";
        if(key == 2)
           return "2!";
        else
           return "3!";
    }
    set
    {
        if( value == "setting")   //value is a[3] = THIS
           this.isSet = true;
    }
}
4

1 回答 1

10

不要将其operator[]视为获取或设置的函数,这可能会令人困惑。将其视为正常功能。实际上,让我们将其重写为普通函数:

struct X
{
    int arr[10];
    int& getIndex(int idx) { return arr[idx]; }
};

//...
//initialize x of type X
x.getIndex(3) = 42;

该方法x.getIndex(3)将返回对成员数组中第 4 个元素的引用idx。因为你是通过引用返回的,所以返回值是一个左值并且指向那个确切的元素,所以你可以给它分配一个值,比如说42. 这将修改成员x.arr[3],因为函数返回该特定对象的别名。

operator[]现在你可以像以前一样重写这个

struct X
{
    int arr[10];
    int& operator[](int idx) { return arr[idx]; }
};

并通过调用获得相同的结果

x[3];

甚至

x.operator[](3);

运算符选项只是语法糖。

于 2013-06-12T07:15:14.497 回答