int年;是-2,但我没有给它一个值

int year; is coming up as -2 but i have not put a value to it

本文关键字:一个 int      更新时间:2023-10-16

我是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,但现在我发现它没有。再次感谢。

year的值尚未初始化,当编译器读取未初始化的变量时,会导致未定义的行为。它可以是内存中的任何值,真的。这完全取决于你的电脑和编译器。

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

还要记住,在某些编译器中,必须包含#include <string>(当使用字符串时),否则代码将无法运行。

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

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

注意:这个编译器策略的另一个例子是当您删除动态分配的内存时:poointer通常保留旧地址(不再有效)。

相关文章: