相关疑难解决方法(0)

C++全局初始化顺序忽略依赖关系?

我认为我的问题最好在代码中描述:

#include <stdio.h>

struct Foo;

extern Foo globalFoo;

struct Foo {
    Foo() {
        printf("Foo::Foo()\n");
    }

    void add() {
        printf("Foo::add()\n");
    }

    static int addToGlobal() {
        printf("Foo::addToGlobal() START\n");

        globalFoo.add();

        printf("Foo::addToGlobal() END\n");

        return 0;
    }
};

Foo globalFoo;

int dummy = Foo::addToGlobal();

int main() {
    printf("main()\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

以上打印(使用gcc 4.4.3):

Foo::Foo()
Foo::addToGlobal() START
Foo::add()
Foo::addToGlobal() END
main()
Run Code Online (Sandbox Code Playgroud)

这是我的期望,似乎合乎逻辑.

但是,当我交换以下行时:

Foo globalFoo;
int dummy = Foo::addToGlobal();
Run Code Online (Sandbox Code Playgroud)

进入这个:

int dummy = Foo::addToGlobal();
Foo globalFoo;
Run Code Online (Sandbox Code Playgroud)

该计划输出以下内容:

Foo::addToGlobal() START
Foo::add()
Foo::addToGlobal() END
Foo::Foo()
main()
Run Code Online (Sandbox Code Playgroud)

似乎使用尚未构造的实例调用 …

c++

17
推荐指数
2
解决办法
1万
查看次数

标签 统计

c++ ×1