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

标签 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]

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

最佳答案

是的,这一切都有效,它们的顺序无关紧要(除非您尝试“获取”未初始化引用的地址,因为这取决于它的“值”)。即使使用数组,单纯的指针运算也是 well-defined .

关于c++ - 初始化指针或引用成员变量以指向另一个成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58176489/

相关文章:

c++ - 在 Windows cmd 提示符下工作时设置 NLOpt

.net - Web 浏览器事件日志

使用字符串作为模板类型时 Linux 中的 C++ 核心转储

c++ - 这种情况下有什么样的多线程保护?

c++ - 如何在 C++ 中读取和比较 .jpeg 文件中的单个字节?

c++ - 如何在 C++ 中的大端和小端值之间进行转换?

c++ - 智能指针,为什么在更改底层对象之前需要检查我是否是唯一用户?

c++ - 如何用语法表示动力学方程

c++ - C++14 标准布局类型可以将 `alignas` 用于字段吗?

c++ - MinGW:错误:无法识别的命令行选项 '-V'