C++定义局部变量的时候为什么不初始化呢

时间:2022-09-09 20:55:38
是在内存的什么地方分配的呢?和全局变量一样么,因为全局变量是会自动初始化的,直接把局部变量初始化为0的话安全性上不是更好么

11 个解决方案

#1


应该是堆栈中,一般不能初始化。

#2


堆栈?堆还是栈呢?哈哈,有什么相关的书介绍一下

#3


局部变量都是栈空间吧?

#4


呵呵,编译器为什么会这样呢?明显这样的话对于程序是不好的

#5


局部变量被分配在栈里。
全局变量和静态变量都存在静态存储区。
new出来的空间在堆里。

给局部变量自动初始化为0也不一定就安全。对于一个变量没有意义的值就是不安全的。0一定有意义么?c++从效率出发,其编译器的原则就是“非必要不使用”。对于可做可不做的,它都会选择不做。

#6


楼上说得不错,“非必要不使用”,就应如此,这就是C/C++的原则

#7


我们通常说的“堆”其实是“数据段(data segment)”的一部分,动态分配内存(如new 和 malloc)本质上都是在“数据段”中寻找足够大小的内存块,然后分配给应用程序;

全局变量是在“数据段”中除了“堆”之外的空间里面,它们会被自动初始化(其实在C语言中还分为“已初始化”和“未初始化”两种,但是在c++中都是“已初始化”的了)。而局部变量是分配到“栈(stack)”中,它们是不会被自动初始化的。

#8


局部变量被分配在栈里
全局变量和静态变量都存在静态存储区。
new出来的空间在堆里
我们通常说的“堆”其实是“数据段(data segment)”的一部分,动态分配内存(如new 和 malloc)本质上都是在“数据段”中寻找足够大小的内存块,然后分配给应用程序

#9


初始化局部变量是可以,但是很让费时间。

#10


对局部变量的初始化是程序员的责任
c++编译器只做自己该做的事情~

#11


不初始化是为了效率,但也随之产生一些问题。
调用未初始化的数据会出错,即使是int型数据。
天杀的微软,其他的编译器就不会抱错。

#1


应该是堆栈中,一般不能初始化。

#2


堆栈?堆还是栈呢?哈哈,有什么相关的书介绍一下

#3


局部变量都是栈空间吧?

#4


呵呵,编译器为什么会这样呢?明显这样的话对于程序是不好的

#5


局部变量被分配在栈里。
全局变量和静态变量都存在静态存储区。
new出来的空间在堆里。

给局部变量自动初始化为0也不一定就安全。对于一个变量没有意义的值就是不安全的。0一定有意义么?c++从效率出发,其编译器的原则就是“非必要不使用”。对于可做可不做的,它都会选择不做。

#6


楼上说得不错,“非必要不使用”,就应如此,这就是C/C++的原则

#7


我们通常说的“堆”其实是“数据段(data segment)”的一部分,动态分配内存(如new 和 malloc)本质上都是在“数据段”中寻找足够大小的内存块,然后分配给应用程序;

全局变量是在“数据段”中除了“堆”之外的空间里面,它们会被自动初始化(其实在C语言中还分为“已初始化”和“未初始化”两种,但是在c++中都是“已初始化”的了)。而局部变量是分配到“栈(stack)”中,它们是不会被自动初始化的。

#8


局部变量被分配在栈里
全局变量和静态变量都存在静态存储区。
new出来的空间在堆里
我们通常说的“堆”其实是“数据段(data segment)”的一部分,动态分配内存(如new 和 malloc)本质上都是在“数据段”中寻找足够大小的内存块,然后分配给应用程序

#9


初始化局部变量是可以,但是很让费时间。

#10


对局部变量的初始化是程序员的责任
c++编译器只做自己该做的事情~

#11


不初始化是为了效率,但也随之产生一些问题。
调用未初始化的数据会出错,即使是int型数据。
天杀的微软,其他的编译器就不会抱错。