初始化指针或引用成员变量以指向另一个成员
Initializing pointer or reference member variable to point to another member
是以下明确定义的行为,它的行为是否符合预期:
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];
}
自从提出这个问题以来,我遇到了一个在这样使用它时需要警惕的示例:如果x0
和x1
出现在初始值设定项列表中,它们的行为与以前不同。它们不能初始化为整数文字,如果它们被初始化为任何内容,x0
将不会引用x[0]
和/或x1
不会引用x[1]
。
我会将其作为答案发布,但我仍然不知道我的主要问题的答案:任何给定的场景实现是否依赖于/未定义的行为?
是的,这一切都有效,它们出现的顺序并不重要(除非您尝试"获取"未初始化引用的地址,因为这取决于它的"值"(。 即使对于数组,单纯的指针算术也是明确定义的。
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何从另一个文件继承私有成员变量和公共函数
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 没有公共构造函数作为另一个类模板成员的类模板
- 将另一个类的对象传递到当前类C++的构造函数中(不是成员初始化)
- 将类成员函数作为线程调用到另一个类成员函数时发出警告消息
- 如何使用另一个类中的公共成员函数作为参数调用线程
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- 使用指向成员函数的指针在另一个类中调用类构造函数
- 访问 std:vector 的类成员 std:vector 在一个类中与另一个 std:vector
- 无法将指向类的成员函数的函数指针作为参数传递给同一类的另一个成员函数
- 复制赋值函数如何访问另一个对象的私有成员(Stroustroup 原则和实践书)?
- 如何从另一个嵌套类中调用某个封闭类的嵌套类的函数指针成员的值?
- 在C++中,是否可以"overload"作为另一个类成员的对象?
- C++ - 非静态 void* 成员,指向具有相同地址但不同值的不同对象的另一个非静态成员
- 如何检查一个模板是否是另一个模板的类成员
- 如何在另一个类中使用类成员的正确方法?