在图书规则101中说我们应该确保i
被初始化,下面的代码示例是坏的吗?
int i;
i=10;
int i=10
与int i;i=10;
之间的情况不一样?
答案 0 :(得分:3)
本书提供了很好的建议:如果可以的话,你应该在创建变量后立即初始化变量。让它没有初始化是没有错的;但它很危险,因为在为其赋值之前可能会意外地使用它。这会给出未定义的行为,并且可能导致难以找到的错误。
答案 1 :(得分:2)
您确实给了i
一个有效值,但它没有被初始化,而是已经分配了。
int i; //uninitialized
i = 10; //assignment
虽然
int i = 10; //initialized
答案 2 :(得分: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);
在其他情况下,您应遵循规则并提供初始化作为声明的一部分。
答案 3 :(得分:1)
是的,如果可能的话,在创建变量时始终初始化变量是一个非常好的习惯。根据我的经验,我发现不仅将此规则应用于基元,而且将对象本身应用于此。
当然也有例外,但将它们视为异常。
如果您说要执行某种类型的操作所需的一系列数字,则应确保它们都分配了某些值。如果您尝试使用未初始化的变量执行任何操作,您的程序将崩溃。但是,如果您在创建时为它们分配了所有值,例如0或1,那么当您的程序仍然存在严重问题时,调试将变得更加容易。
对于对象,通常可以通过在创建时初始化代码来使代码更好。例如,我正在开发一个tile map编辑器,当然需要tile。当要创建地图时,它会初始化'x'个数量的切片。我没有留下他们未定义。其他明智的我在任何时候都不会以任何方式使用它们。没有在现场初始化它们就没有任何意义。
你可能也遇到了指针,但我也会提到它们。简而言之,指针是 drumroll 指向变量的变量。如果你尝试使用没有指向某个东西的指针,那么就会出现严重的问题。
指针指南
1.)如果你不打算为指针分配一个变量(或分配一些东西),那么一定要指定它NULL
2.)如果你不确定变量是否指向某个东西,那么在尝试使用它之前检查它是否仍为NULL。
3.)如果你知道指针肯定会指向某个东西