如果我的类声明了两个成员数据 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 上尝试了该示例并得到:0
和 10
而在 GCC 上我得到了 10
和 10
!
那么这样做是不是未定义的行为?
最佳答案
So as a result is it undefined behavior to do so?
是的。读取不确定值的行为是未定义的。在本例中,y_
的值用于初始化x_
时具有不确定的值,因为它是在x_
之后初始化的。它在 x_
之后初始化,因为成员是按声明顺序初始化的。
关于c++ - 从它之后声明的另一个成员数据初始化一个成员数据是未定义的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56615135/