1

嗯,这解释起来有点复杂。我正在编译一个静态库,它的头文件看起来类似于:

class Foo{
    static int Goo(){
        DoSomethingExciting();
        return 0;       
    }
    static int fooMember;
}

在 Cpp 我有 fooMember 的初始化:

int Foo::fooMember = Foo::Goo();

当将静态库链接到我正在编写的应用程序时,应该调用的 Goo 方法没有被调用。确切地说,根本没有调用 DoSomethingExciting() 方法。我确实在应用程序中使用了 Foo 类。当我把线:

int Foo::fooMember = Foo::Goo();

在我的应用程序的 cpp 中(当然我从静态库中删除了同一行),我看到 Goo() 被调用。

我不确定如何命名我遇到的问题,我猜这是全局静态成员初始化或类似问题的问题。

我正在使用 RVCT 进行编译。在 Visual Studio 中编译相同的场景时,一切正常。我猜 RVCT 的行为不同,我可能需要添加一些编译标志。

顺便说一句,我也尝试在我编译的可执行文件上使用反编译器,但我没有看到对 Goo() 的任何调用,尽管我确实看到该方法在文件中。

我希望我对我的问题足够清楚:)

提前致谢...

4

1 回答 1

0

如果它是静态对象的构造函数,它会被调用,但既然它只是一个静态方法,为什么会自动生成对它的调用呢?

于 2011-02-06T15:42:42.517 回答