我什么时候需要在c ++中初始化变量?有些人断言它很重要,但也许这在c语言中更是一个问题?
我正在引用原语,即char,int,long,double
假设我有以下代码段
int len;
double sum, mean;
char ch;
while (true) {
// here I use these primitives where they are initialized.
}
那么 - 我应该将这些原语初始化为一个很好的编程实践吗?
答案 0 :(得分:2)
问题当然是使用单元化变量,如
int x;
int y=1+x; // oops what is y?
AFAIK,语言标准允许编译器将x
初始化为0
,但也将其保留为单元化。在任何情况下,大多数优化(-O
)都会在上述情况下省略初始化。
如果你使用完整的警告编译器标志(例如-Wall -Wextra -pedantic
),编译器几乎肯定会发现单元化变量的使用(它还会警告库头文件中的单元化变量的使用,例如boost头 - 升级开发人员似乎没有使用这种有用的诊断方法。)
通常,是否初始化所有变量都是一种风格问题。只要变量有合理的初始值和/或存在使用单一化的危险,我就会提供明确的初始化。与C不同,在C ++中,单元化变量的可能性非常少,特别是在通过返回值(包括移动语义)传递时。
答案 1 :(得分:2)
在c ++编译器中,通常不会初始化本地(自动)变量。这些变量在堆栈上创建,并用随机值填充。通常,您不需要对变量进行实体化,而是仔细阅读编译器所说的内容。尝试:
int main() {
int x;
x=x+1;
}
并使用-Wall开关编译它(我正在使用gcc)。当消息
x.cpp: In function ‘int main()’:
x.cpp:3:6: warning: ‘x’ is used uninitialized in this function [-Wuninitialized]
x=x+1;
编写,然后初始化这样的变量会更好。
答案 2 :(得分:1)
您应该初始化所有变量以防止:“输入中的垃圾 - 输出中的垃圾”。
答案 3 :(得分:1)
我什么时候需要在c ++中初始化变量?
定义局部变量时,应该使用合理的值初始化它们。如果你还不能给变量一个合理的值,那么你应该稍后定义它。
此处的目标是最大限度地减少函数中的状态量,以使其更易于理解。当在函数开头定义所有变量时,您不知道它们的用途。当它们在需要它们时定义时,很明显它们在那之前没有使用过。这也有助于限制声明变量的范围(例如在循环内部而不是在循环之内,因此循环外的状态更少)并且它允许您将更多变量定义为const(因此不添加状态)。