以下是定义明确的行为,它的行为是否与预期的一样?
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]
。
我会将其发布为答案,但我仍然不知道我的主要问题的答案:给定方案实施中是否有任何依赖/未定义的行为?
答案 0 :(得分:0)
是的,这一切都可行,它们的顺序无关紧要(除非您尝试“获取”未初始化引用的地址,因为这取决于其“值”)。即使使用数组,well-defined也只不过是指针算术。