面试题答案
一键面试初始化不同点
- 全局变量:
- 若未显式初始化,对于基本数据类型(如
int
、double
等),在全局作用域中会被初始化为0(对于bool
类型初始化为false
)。 - 对于自定义类型(类),会调用默认构造函数进行初始化。
- 若未显式初始化,对于基本数据类型(如
- 局部变量:
- 若未显式初始化,对于基本数据类型,其值是未定义的,是内存中的随机值。
- 对于自定义类型(类),若没有提供初始化表达式,同样会调用默认构造函数进行初始化。
举例说明
#include <iostream>
// 全局变量
int globalInt;
class MyClass {
public:
int value;
MyClass() : value(0) {}
};
MyClass globalObj;
int main() {
// 局部变量
int localInt;
MyClass localObj;
std::cout << "全局int变量未初始化值: " << globalInt << std::endl;
std::cout << "全局对象未初始化value值: " << globalObj.value << std::endl;
// 这里localInt值未定义,直接输出可能导致未定义行为,这里仅做示意
std::cout << "局部int变量未初始化值(未定义): " << localInt << std::endl;
std::cout << "局部对象未初始化value值: " << localObj.value << std::endl;
return 0;
}
在上述代码中,全局int
变量globalInt
未显式初始化时为0,全局对象globalObj
调用默认构造函数初始化value
为0。而局部int
变量localInt
未显式初始化时是未定义值,局部对象localObj
调用默认构造函数初始化value
为0。