int年;即将出现-2,但我没有给它增值

时间:2014-09-23 14:18:20

标签: c++ integer

我是C ++的新手,并且在理解为什么我的整数年出现为-2时遇到了一些问题。据我所知,我没有为它设置一个值。

#include <iostream>
#include <stdlib.h>                         

using namespace std;

int main()                                 
{
    int age;                                
    string mystring;                         
    mystring = "Did you enjoy the game?";   
    int day, month;
    int year;

    cout << year << "\n";

    cout << "Game Over!" << endl;           

    cout << "You Lose!" << endl;            
    cout << mystring << endl;             
    cout << "What was the best part of the game? \n";  
    cout << "Was it the graphics? \n";                  


    cout << "Please put in your age: ";
    cin >> age;                                        
    cout << "The age you put in is: " << age << endl;

    cout << "Please put in the day (1-31) and the month (1-12) in thier numerical values: " <<        endl;
    cin >> day >> month;
    cout << "So today is " << month << "/" << day;

    system("Pause");                        
}

一切都很好。 谢谢你的一切。我认为如果它没有价值会自动变为0,但现在我发现它没有。再次感谢。

2 个答案:

答案 0 :(得分:3)

year的值尚未初始化,当编译器读取未初始化的变量时,它会导致undefined behavior。 它可能是记忆中的任何价值,真的。这一切都取决于您的计算机和编译器。

这样做总是一个 BAD 的想法,因为它会导致错误的代码,
根据经验,在调用变量之前总是初始化值。

另外请注意,在某些编译器中,必须包含#include <string>(使用字符串时),否则您的代码将无法运行。

答案 1 :(得分:0)

在C ++中,您不需要为不使用的内容付费。这意味着在语言中有一些地方可以让编译器做得更多,但是如果开发人员实际上并不想要完成这些事情(出于性能或其他原因),那么它就没有了。

这(变量的初始化)就是其中一种情况:如果你没有为POD变量显式赋值(或者在其上调用构造函数),你就不能假设它有任何值。在这种情况下,编译器所做的是为year分配堆栈内存,并且变量将使用堆栈中的内存中的任何内容进行初始化,在该位置(在您的情况下为-2,当被解释为int时)。

注意:此编译器策略的另一个示例是当您删除动态分配的内存时:poointer通常仍然填充旧地址(不再有效)。