默认值是什么,未初始化变量时会分配变量? 在下面的代码中,我没有初始化变量 - count和j然而,我得到不同的值。不能为所有变量分配默认值零?无法理解。
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
char str[] ("Hello World!!!");
char *p;
int i;
int count;
int j;
cout << "count is:" << count << endl;
cout <<"Value of j is " << j <<endl;
p=str;
for (i=0;i<20;i++){
cout << *p;
p++;
}
cout << "Length of string is:" << count <<endl;
}
O / P
计数是:4198400 j的值是:1 你好,世界!!! 字符串长度为:4198400
答案 0 :(得分:1)
静态变量初始化为零,非静态变量未初始化,并且保留变量位置内存中的值。
变量初始化为零的原因是它带有成本,初始化变量需要花费,而且由于C ++(和C)是高性能语言,你不支付你不使用的东西,他们这样做不执行此初始化。
静态可以自由初始化,因此初始化为零。这是C ++中这样工作的原因之一,因为它在C中的工作原理如此,C ++被认为是C的下一个迭代,因此保留了许多相同的原则。
这实际上是在Scott Meyers的谈话开始时提到的:"The last thing D needs"
int x; // x = uninitialized
int x; // <-- in global scope: x = 0
static int x; // x = 0
int* x = new int; // *x = uninitialized