相关疑难解决方法(0)

如何防止编译出"未使用的"全局变量?

我正在使用静态初始化来简化在C++中使用工厂注册某些类的过程.不幸的是,我认为编译器正在优化"未使用的"对象,这些对象旨在在其构造函数中执行有用的工作.有没有办法告诉编译器不要优化全局变量?

class SomeClass {
    public:
        SomeClass() {
            /* do something useful */
        }
};

SomeClass instance;
Run Code Online (Sandbox Code Playgroud)

我在SomeClass的构造函数中的断点没有被击中.在我的实际代码中,SomeClass位于头文件中,实例位于源文件中,或多或少是单独的.

编辑:正如KJAWolf猜测的那样,这段代码实际上被编译成静态库,而不是可执行文件.它的目的是注册静态库提供的一些类型,静态列表类型及其创建者,然后工厂从构造中读取.由于lib提供了这些类型,因此不希望将此代码添加到可执行文件中.

我还发现通过将代码移动到包含其他现有代码的另一个源文件,它可以正常工作.似乎拥有一个纯粹由这些全局对象组成的文件是导致问题的原因.就好像那个翻译单元完全被忽略了一样.

c++ global-variables

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

模板中的静态成员变量,具有多个dll

我的代码是针对多个.dll文件构建的,我有一个具有静态成员变量的模板类.

我希望这个静态成员变量的相同实例在所有dll中都可用,但它不起作用:我在每个中看到不同的实例(不同的值).

当我不使用模板时,没有问题:初始化其中一个源文件中的静态成员,并在类上使用__declspec(dllexport)和__declspec(dllimport)指令.但它不适用于模板.有没有办法使它工作?

我看到一些使用"extern"的提议解决方案,但我认为我不能使用它,因为我的代码应该与visual studio 2002和2005一起使用.

谢谢.

澄清:我希望每种不同类型的模板实例都有一个不同的静态变量实例.但是如果我在2个不同的dll中实例化具有相同类型的模板,我希望在它们中都有相同的变量.

c++ dll static templates visual-studio-2005

18
推荐指数
2
解决办法
7116
查看次数