初始化指针或引用成员变量以指向另一个成员

时间:2019-09-30 23:45:17

标签: c++

以下是定义明确的行为,它的行为是否与预期的一样?

class A {
    int x;
    int &y = x;
    int *z = &x;
}

此外,做类似的事情时我还需要注意什么吗?(请参阅更新)y紧随x之后是否重要?

我可以用像这样的数组吗?

class A {
    int arr[2];
    int &y = arr[0];
    int *z = &(arr[1]);
}

所有这些似乎都work fine,但我担心这取决于实现/不可移植。

编辑/更新

我正在使用它用数组替换一组成员变量,同时保持向后兼容性。所以,我要从这样的事情出发:

class A {
    int x0;
    int x1;
}

class A {
    int x[2];
    int &x0 = x[0];
    int &x1 = x[1];
}

自从问了这个问题之后,我遇到了一个在使用时要警惕的示例:x0x1的行为与之前出现在初始化列表中的行为不同。它们无法初始化为整数文字,并且如果将它们初始化为任何内容,则x0将不会引用x[0]和/或x1将不会引用x[1]

我会将其发布为答案,但我仍然不知道我的主要问题的答案:给定方案实施中是否有任何依赖/未定义的行为?

1 个答案:

答案 0 :(得分:0)

是的,这一切都可行,它们的顺序无关紧要(除非您尝试“获取”未初始化引用的地址,因为这取决于其“值”)。即使使用数组,well-defined也只不过是指针算术。