Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从后面声明的另一个成员数据初始化一个成员数据是未定义的行为吗?_C++_Oop - Fatal编程技术网

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

C++ 从后面声明的另一个成员数据初始化一个成员数据是未定义的行为吗?,c++,oop,C++,Oop,如果我的类声明了两个成员数据x和y,使得x从y初始化,并且y有一个值,那么isx有一个未定义的值?还是什么 class Empl { public: int x_{ y_ }; int y_{ 10 }; }; int main(){ Empl e{}; std::cout << e.x_ << ", " << e.y_ << std::endl; } class emp{ 公众: i

如果我的类声明了两个成员数据
x
y
,使得
x
y
初始化,并且
y
有一个值,那么is
x
有一个
未定义的值
?还是什么

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

int main(){

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

}
class emp{
公众:
int x{y};
int y{10};
};
int main(){
雇员{};
标准::cout
因此,这样做是否是未定义的行为

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

C++需要(或用于要求)
x
先初始化,然后再
y
初始化,因为这是它们声明的顺序。GCC可能正在优化它所认为的constepr。至于UB,这是可能的。编译并运行时使用
-fsanitize=undefined
。它们是