c++ - 从它之后声明的另一个成员数据初始化一个成员数据是未定义的行为吗?

标签 c++ oop

如果我的类声明了两个成员数据 x_y_ 以便从 y_ 初始化 x_ > 和 y_ 有一个值那么 x_ 有一个 Undefined value 吗?或者是什么?

class Empl {
    public:
        int x_{ y_ };
        int y_{ 10 };
};

int main(){

    Empl e{};
    std::cout << e.x_ << ", " << e.y_ << std::endl;

}

我在 MSVC++ 2105 上尝试了该示例并得到:010 而在 GCC 上我得到了 1010!

那么这样做是不是未定义的行为?

最佳答案

So as a result is it undefined behavior to do so?

是的。读取不确定值的行为是未定义的。在本例中,y_ 的值用于初始化x_ 时具有不确定的值,因为它是在x_ 之后初始化的。它在 x_ 之后初始化,因为成员是按声明顺序初始化的。

关于c++ - 从它之后声明的另一个成员数据初始化一个成员数据是未定义的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56615135/

相关文章:

c++ - 使用 std::function 作为参数的可变参数模板

c++ - 玩家移动时,GameBoy Advance对象未显示在正确的位置

javascript 子类 node.js 表达方法来添加通用功能?

c# - 逻辑现在是多态而不是 Switch,但是构造呢?

c++ - 有意互斥传递的 pthread

c++ - 为什么要为左值参数调用 move 赋值运算符?

r - 在 R 中,修改类中的值

perl - 为什么子类不继承其父类的常量?

php - 相当于 PHP 中的 std::set?

c++ - 知道我的顶点是否(以及如何)被重新排序