我是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,但现在我发现它没有。再次感谢。
答案 0 :(得分:3)
year
的值尚未初始化,当编译器读取未初始化的变量时,它会导致undefined behavior。
它可能是记忆中的任何价值,真的。这一切都取决于您的计算机和编译器。
这样做总是一个 BAD 的想法,因为它会导致错误的代码,
根据经验,在调用变量之前总是初始化值。
另外请注意,在某些编译器中,必须包含#include <string>
(使用字符串时),否则您的代码将无法运行。
答案 1 :(得分:0)
在C ++中,您不需要为不使用的内容付费。这意味着在语言中有一些地方可以让编译器做得更多,但是如果开发人员实际上并不想要完成这些事情(出于性能或其他原因),那么它就没有了。
这(变量的初始化)就是其中一种情况:如果你没有为POD变量显式赋值(或者在其上调用构造函数),你就不能假设它有任何值。在这种情况下,编译器所做的是为year
分配堆栈内存,并且变量将使用堆栈中的内存中的任何内容进行初始化,在该位置(在您的情况下为-2,当被解释为int时)。
注意:此编译器策略的另一个示例是当您删除动态分配的内存时:poointer通常仍然填充旧地址(不再有效)。