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

Initializing pointer or reference member variable to point to another member

本文关键字:成员 另一个 变量 引用 初始化 指针      更新时间:2023-10-16

是以下明确定义的行为,它的行为是否符合预期:

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]);
}

所有这些似乎都可以正常工作,但我担心这是依赖于实现/不可移植的。

编辑/更新

我使用它用数组替换一组成员变量,同时保持向后兼容性。所以,我从这样开始:

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]

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

是的,这一切都有效,它们出现的顺序并不重要(除非您尝试"获取"未初始化引用的地址,因为这取决于它的"值"(。 即使对于数组,单纯的指针算术也是明确定义的。

相关文章: