是否初始化原语 - c ++

时间:2014-04-16 15:40:40

标签: c++ initialization

我什么时候需要在c ++中初始化变量?有些人断言它很重要,但也许这在c语言中更是一个问题?

我正在引用原语,即char,int,long,double

假设我有以下代码段

 int len; 
 double sum, mean;
 char ch;

 while (true) {

    // here I use these primitives where they are initialized.


 }

那么 - 我应该将这些原语初始化为一个很好的编程实践吗?

4 个答案:

答案 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(因此不添加状态)。