我认为我的问题最好在代码中描述:
#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++ ×1