2014-02-25 34 views

回答

1

是的,如果可能的话,一旦创建变量就始终初始化变量是一种非常好的习惯。根据我的经验,我发现不仅将这个规则应用于基元,而且还将物体本身应用。

当然也有例外,但将它们当作是例外。

如果你有说,你需要执行一些类型的操作的数字序列,你应该确保他们都有一些值分配。如果您尝试对未初始化的变量执行任何操作,您的程序将会崩溃。但是,如果您在创建时为它们分配所有值,例如0或1,那么当您的程序仍然存在严重问题时,调试将变得更加容易。

通常情况下,您可以通过在创建时初始化代码来使代码更好。例如,我正在制作一个瓷砖地图编辑器,这当然需要瓷砖。当地图被创建时,它将初始化“x”个地块。我没有把它们留给未定义的。除此之外,在任何情况下,我都无法以任何方式使用它们。不在现场初始化它们就没有任何意义。

您可能也碰到过指针,但我也会提及它们。总之一个指针是一个变量,它指向一个变量。如果你尝试使用没有指向某个东西的指针,那么会出现严重的问题。

指针指南 1。)如果你不打算给指针分配一个变量(或者分配一些东西),那么一定要分配一个变量NULL 2.)如果你不确定变量是否指向某个东西,那么在尝试之前检查它是否仍为NULL使用它。 3.)如果你知道指针会指向肯定的东西会更好

2

您确实给i一个有效的值,但它没有被初始化,它被赋值。

int i; //uninitialized 
i = 10; //assignment 

虽然

int i = 10; //initialized 
3

这本书是给很好的建议:你应该为你,如果你可以创建他们尽快初始化变量。将它初始化并没有错,但它很危险,因为在给它赋值之前可能会意外地使用它。这给出了未定义的行为,并可能导致难以发现的错误和沮丧。

+0

编译器通常也可以帮助你。 – chris

+0

@chris:确实;应该总是切换编译器警告,他们经常会发现这样的错误。但是他们并不是100%可靠的,所以培养避免错误的习惯也是一个好主意。 –

1

我假设你正在谈论局部变量,因为赋值语法不能在函数外工作。尽管编译器足够聪明以同样的方式处理这两个语句,但第二种方法(即int i = 10)更具可读性。

从该声明必须与初始化一起规则唯一的例外是当你需要使用的变量是初始分配外范围:

// It does not make sense to initialize i here, because no matter what its initial value is, 
// the loop below will make an unconditional assignment to it. 
int i; 
do { 
    cout << "Please enter a number (zero exits the program)" << endl; 
    cin >> i; 
} while (i != 0); 

在其他情况下,你应该遵循规则并提供初始化作为声明的一部分。