C++ C+中的数组中的垃圾值是否可能为负+;?

C++ C+中的数组中的垃圾值是否可能为负+;?,c++,c++11,c++14,C++,C++11,C++14,考虑: int a[100]; a[i](其中0

考虑:

int a[100];

a[i]
(其中0 是的,为什么不呢?这些位可以是任何东西,整数的符号通常是其MSB(最高有效位)。如果该位为
1
,则
int
将被视为负值


不过,我觉得知道这一点没什么意义。你不能依赖垃圾数据,因为它是未定义的行为。

是的,为什么不呢?这些位可以是任何东西,整数的符号通常是其MSB(最高有效位)。如果该位为
1
,则
int
将被视为负值


不过,我觉得知道这一点没什么意义。你不能依赖垃圾数据,因为它是未定义的行为。

我认为如果你理解垃圾值的含义,你就不会问这个问题

声明变量时,会为其分配一段内存。这个内存可以是操作系统认为是空闲的任何东西,因此可以包含由以前的某个程序写入的位,该程序分配了相同的内存


之前的程序可以是任何东西(音乐播放器、您正在玩的游戏、您查看的图像等)。因此,数据只是一堆位,现在在代码中用作整数。因此,编译器会将其读取为整数,这就是为什么正如AlexG所提到的,如果第一位是
1
,它可能是负数的原因。我想如果你理解垃圾值的含义,你就不会问这个问题了

声明变量时,会为其分配一段内存。这个内存可以是操作系统认为是空闲的任何东西,因此可以包含由以前的某个程序写入的位,该程序分配了相同的内存


之前的程序可以是任何东西(音乐播放器、您正在玩的游戏、您查看的图像等)。因此,数据只是一堆位,现在在代码中用作整数。因此,编译器会将其读取为整数,这就是为什么如AlexG所述,如果第一位是
1
,那么它可能是负数的原因。答案是它可以是任何值

但是不要考虑用它来做任何事情。该计划:-

void func()
{
    int a[100];
    if (a[10] == 0 || a[10] != 0) {
        std::cout << "The value is either zero or not zero\n";
    }
}
void func()
{
INTA[100];
如果(a[10]==0 | | a[10]!=0){

答案是它可以是任何值

但是不要考虑使用它。这个程序:-< /P>
void func()
{
    int a[100];
    if (a[10] == 0 || a[10] != 0) {
        std::cout << "The value is either zero or not zero\n";
    }
}
void func()
{
INTA[100];
如果(a[10]==0 | | a[10]!=0){


是的。你为什么关心?垃圾就是垃圾。可能包含任何东西,任何位序列。你为什么关心?如果“垃圾值”是指“未初始化的对象”那么是的,读取数据是一种未定义的行为,这样你就可以得到任何值,或者没有值或其他任何东西。你永远不会知道,因为一旦你读取了该值,程序执行的其余部分就变成了垃圾:-)@dasblinkenlight以及它之前的所有程序执行。时间旅行和所有。是的。你为什么在意?垃圾是一种伪装年龄。可能包含任何东西,任何位序列。你为什么关心?如果“垃圾值”是指“未初始化的对象”那么是的,读取数据是一种未定义的行为,这样你就可以得到任何值,或者没有值或其他任何东西。你永远不会知道,因为一旦你读取了该值,程序执行的其余部分就变成了垃圾:-)@dasblinkenlight以及它之前的所有程序执行。时间旅行等等。谢谢你的澄清。我是考虑在我的程序中使用垃圾值。未定义的行为符合标准的哪一部分?读取陷阱表示是未定义的行为。您认为这在这里适用的原因是什么?感谢澄清。我正在考虑在我的程序中使用垃圾值。未定义的行为符合标准的哪一部分?读取陷阱表示是未定义的行为ePresation是未定义的行为。是什么让您认为它适用于此?感谢您的澄清。我正在考虑在我的程序中使用垃圾值。它比这更复杂。读取未初始化的变量会调用未定义的行为。您不仅不应该期望任何特定值,也不应该期望您的程序o继续工作。这就是我所说的,读取的位来自其他以前的程序,因此可能包含任何内容,因此完全不可靠…@davmac你知道有任何实际平台读取未初始化的值会导致程序崩溃吗?@JeremyFriesner我相信它们确实存在。但是,即使是在“常规”平台上平台,这样做可能会打破某些编译器假设,导致超出您预期的奇怪行为,包括导致崩溃。感谢您的澄清。我正在考虑在我的程序中使用垃圾值。它比这更复杂。从未初始化的变量读取会调用未定义的行为。不仅如果你不期望任何特定的值,你就不应该期望你的程序继续工作。这就是我所说的,读取的位来自其他以前的程序,因此可能包含任何内容,因此完全不可靠…@davmac你知道有任何实际的平台,读取未初始化的值会导致程序崩溃吗?@JeremyFriesner我相信它们确实存在。然而,即使在“常规”平台上,这样做也可能打破某些编译器假设,导致超出预期的奇怪行为,包括导致崩溃。