为什么extern const初始化不正确?

时间:2017-01-18 08:09:30

标签: c++ initialization extern linkage

我的问题涉及3个模块,所以我在下面发布了它们。

简而言之,我在3个不同的翻译单元中有3个外部常量变量k1k2k3k1已初始化为99,k2k1k3k2。问题是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
}

0 个答案:

没有答案