以下是明确定义的行为吗,它的行为是否符合人们的预期:
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];
}
自从问了这个问题后,我遇到了一个例子,说明在像这样使用它时要小心:x0
和 x1
的行为与以前不同如果它们出现在初始化列表中。它们不能被初始化为整数文字,如果它们被初始化为任何东西,x0
将不会引用 x[0]
和/或 x1
不会引用 x[1]
。
我会发布这个作为答案,但我仍然不知道我的主要问题的答案:是否有任何给定场景的实现依赖/未定义行为?
最佳答案
是的,这一切都有效,它们的顺序无关紧要(除非您尝试“获取”未初始化引用的地址,因为这取决于它的“值”)。即使使用数组,单纯的指针运算也是 well-defined .
关于c++ - 初始化指针或引用成员变量以指向另一个成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58176489/