MST

星途 面试题库

面试题:C++中全局变量与局部变量初始化差异的基础考察

请简述C++中全局变量和局部变量在初始化方面有哪些不同点,并举例说明。例如,全局变量和局部变量在未显式初始化时的值分别是什么情况。
40.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

初始化不同点

  1. 全局变量
    • 若未显式初始化,对于基本数据类型(如intdouble等),在全局作用域中会被初始化为0(对于bool类型初始化为false)。
    • 对于自定义类型(类),会调用默认构造函数进行初始化。
  2. 局部变量
    • 若未显式初始化,对于基本数据类型,其值是未定义的,是内存中的随机值。
    • 对于自定义类型(类),若没有提供初始化表达式,同样会调用默认构造函数进行初始化。

举例说明

#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。