在C+中递增未初始化的int-safe+;? int func(){ INTA; ++a、 //这安全吗? printf(“%d\n”,a); } 我知道当我打印代码< > 时,我得到了未定义的行为,但是在C++标准中是 +a>代码>安全吗?这是否会在没有副作用(引发异常或程序崩溃)的情况下将“另一个”未初始化的值分配给a?

在C+中递增未初始化的int-safe+;? int func(){ INTA; ++a、 //这安全吗? printf(“%d\n”,a); } 我知道当我打印代码< > 时,我得到了未定义的行为,但是在C++标准中是 +a>代码>安全吗?这是否会在没有副作用(引发异常或程序崩溃)的情况下将“另一个”未初始化的值分配给a?,c++,initialization,C++,Initialization,无论如何,使用未初始化的变量会产生未定义的行为。所以, 在C++中,不增加未初始化的 int > 不安全> /强>。p> 你所说的“未定义的行为”是什么意思?在我看来,你的程序应该打印一些int,没有任何例外等等 ++(未初始化的int)是绝对合法的,我想。无论var是否初始化,它都只会增加当前值 但无论如何,未初始化的变量是有害的。您的程序可能不会崩溃,但肯定不安全。您应该始终初始化变量。最糟糕的情况是,您的程序看起来正常工作,但会在您不知道原因的情况下随机崩溃,或者只是以一种奇怪的方式运行

无论如何,使用未初始化的变量会产生未定义的行为。所以,
在C++中,不增加未初始化的<代码> int > <强>不安全> /强>。p> 你所说的“未定义的行为”是什么意思?在我看来,你的程序应该打印一些int,没有任何例外等等

++(未初始化的int)是绝对合法的,我想。无论var是否初始化,它都只会增加当前值


但无论如何,未初始化的变量是有害的。

您的程序可能不会崩溃,但肯定不安全。您应该始终初始化变量。最糟糕的情况是,您的程序看起来正常工作,但会在您不知道原因的情况下随机崩溃,或者只是以一种奇怪的方式运行。

未定义的行为意味着该行为未被标准定义。简而言之,任何事情都有可能发生。如果你认为没有未定义的行为,为什么你要声明未初始化的变量是邪恶的?@soon:没有“未定义”的值,递增可能会导致问题。虽然未定义值,但操作和结果已定义且可预测。仅仅因为这个值没有定义并不意味着它不“安全”地递增。@wallyk,我只是解释UB的意思。罗宾在回答的开头问了这个问题。另外,OP说要打印未初始化的变量,而不是递增的。@很快OP问的是递增的,而不是递增的。从问题:“我知道当我打印一个,我得到了未定义的行为,但是+ +安全的C++标准?”即使假设读取未初始化变量提供不确定的值,如果你不知道<代码> < /COD>的值,你怎么知道它不是代码> InthMax < /Cube >(和增量溢出)?挑剔:读取未初始化的变量无效。否则使用它是完全正确的。不然怎么会
inta;a=3工作
a=3
使用未初始化的
a
。只是出于兴趣,我在其他地方看到过这一点,但我从未在标准中找到关于未初始化内存读取的UB引用。有人有指针吗?我发现的唯一一件事是
以本国际标准描述为“未定义”的方式使用布尔值,例如通过检查未初始化的自动对象的值,可能会导致它的行为看起来既不是真的,也不是假的
,也就是这样定义的:)@JoachimIsaksson C++11[conv.lval]“如果glvalue引用的对象不是T类型的对象,也不是从T派生的类型的对象,或者如果该对象未初始化,则需要此转换的程序具有未定义的行为。”@hvd谢谢,我必须阅读5遍才能确定它是这样说的,但肯定是这样:)