如何创建对数组成员的引用

How do create a reference to a member of an array

本文关键字:数组 组成员 引用 何创建 创建      更新时间:2023-10-16
如何

引用类中数组的成员?

像这样:

class ASD{
    int bb[4];
    int& up = bb[0] // <- error need to const
    int& down= bb[1] // <- samething
    int& right= bb[2] // <- samething
    int& left= bb[3] // <- samething
};

这样我就可以这样做:

int main(){
    ASD asd();
    asd.bb[1] = 5;
    // or
    for(int i = 0; i < 4 ; i++){
        asd.bb[i] =i;
    }
    // and still be able to do this:
    asd.left = 50;
    //which will be equal to asd.bb[3] = 50
    return 0;
}

还有一件事。你知道我怎么能反过来吗:

像这样:

class ASD{
    
    int up;  
    int down; 
    int right; 
    in& left; 
    int*& bb = &up; // <- error
};

所以我可以这样做:

ASD asd;
asd.bb[1] = 20;// which is equal to asd.down = 20

您的代码按预期工作。井。。。进行与您的主要问题无关的小调整:

  1. 公开成员
  2. 添加;
  3. 由于大多数解析ASD asd();被解释为函数。使用ASD asd;或更好的ASD asd{};
class ASD
{
public:
    int bb[4];
    int& up = bb[0];
    int& down= bb[1];
    int& right= bb[2];
    int& left= bb[3];
};
int main()
{
    ASD asd{};
    asd.bb[1] = 5;
    for(int i = 0; i < 4 ; i++){
        asd.bb[i] =i;
    }
    asd.left = 50;
    return 0;
}
另一个

不允许您使用此代码的问题是,您使用的是旧的C++标准进行编译。至少使用 c++11 .它支持类内初始化,这就是您正在执行的操作。


如果出于某种原因您仍然想使用 C++98,那么您需要初始化 c-tor 初始化列表中的成员引用:

class ASD
{
public:
    int bb[4];
    int& up = bb[0];
    int& down;
    int& right;
    int& left;
    ASD()
        : up(bb[0]),
        down(bb[1]),
        right(bb[2]),
        left(bb[3])
    {}
};
int main()
{
    ASD asd;
    asd.bb[1] = 5;
    for(int i = 0; i < 4 ; i++){
        asd.bb[i] =i;
    }
    asd.left = 50;    
}

但我强烈建议使用较新的(好吧,它不再是那么新(标准。