我的问题涉及3个模块,所以我在下面发布了它们。
简而言之,我在3个不同的翻译单元中有3个外部常量变量k1
,k2
和k3
。 k1
已初始化为99,k2
至k1
和k3
至k2
。问题是k3
最终为0而不是99。
这里发生了什么?
我已经阅读了所谓的AbstractMap.SimpleImmutableEntry
,但在这里似乎并非如此,因为初始化顺序对我来说是无辜的。如果我错了,请解释我错过的内容。
以下是模块:
module1.h
#ifndef MODULE1_H
#define MODULE1_H
extern const int k1;
#endif // MODULE1_H
module1.cpp
#include "module1.h"
const int k1 = 99;
module2.h
#ifndef MODULE2_H
#define MODULE2_H
#include <module1.h>
extern const int k2;
#endif // MODULE2_H
module2.cpp
#include "module2.h"
const int k2 = k1;
module3.h
#ifndef MODULE3_H
#define MODULE3_H
#include <module2.h>
extern const int k3;
#endif // MODULE3_H
module3.cpp
#include "module3.h"
const int k3 = k2;
的main.cpp
#include <iostream>
#include <module3.h>
using namespace std;
int main() {
cout << "k1 = " << k1 << endl; // ok: 99
cout << "k2 = " << k2 << endl; // ok: 99
cout << "k3 = " << k3 << endl; // !!!surprise!!!: 0
}