面试题答案
一键面试- 初始化顺序:
- C++ 标准并没有明确定义不同源文件中全局变量的初始化顺序。这意味着
a
和b
的初始化顺序是不确定的,可能先初始化a
,也可能先初始化b
,这取决于编译器和链接器的实现。
- C++ 标准并没有明确定义不同源文件中全局变量的初始化顺序。这意味着
- 确保
a
能获取到正确的b
值(不改变代码结构):- 可以使用函数静态局部变量来延迟初始化。在
source1.cpp
中定义一个函数来获取a
的值,在这个函数中使用静态局部变量来存储a
的值,并在首次调用该函数时进行初始化。在初始化时可以确保b
已经被初始化(因为在函数调用时,全局变量初始化应该已经完成)。示例代码如下:
// source1.cpp #include "source2.h" int getA() { static int a = calculateABasedOnB(); return a; } int calculateABasedOnB() { // 假设这里根据 b 计算 a 的值 return static_cast<int>(getB() * 2); }
// source2.cpp double b = 3.14; double getB() { return b; }
- 通过这种方式,在首次调用
getA
函数时,a
会根据已经初始化的b
的值进行正确初始化。
- 可以使用函数静态局部变量来延迟初始化。在