Dri*_*ise 2 c++ g++ visual-studio-2010
为什么未初始化的"max"和"min"值适用于Linux而不适用于Windows?例如:
double max, min, test;
while (1)
{
std::cin >> test;
if (test > max)
max = test;
if (test < min)
min = test;
}
Run Code Online (Sandbox Code Playgroud)
这适用于Linux.我知道一个事实,因为我一直在使用这个(虽然我直到现在还没有意识到这是多么可怕)至少3个月了.但是,许多同事告诉我,他们的机器上已经坏了:他们使用Visual Studio进行编译.他们的陈述是否有效,为什么?这仅仅是UB的情况吗?如果是这样的话,过去几个月没有我注意到它是如何运作的?
另请注意:gcc(Ubuntu/Linaro 4.5.2-8ubuntu4)4.5.2和Visual Studio 2010
这在没有平台上"有效".
它只是调用未定义的行为."似乎做我所期望的"只是UB实现自身的一种方式.不过,这是一个相当不幸的事情,因为它让你相信你的代码很好,直到有一天它会爆炸到你客户的脸上.
因为未定义的行为未定义.它可能有用,或者它可能不起作用,你只是不知道.显然,在您的Linux环境中,它可以工作.