想象一下我有这样的图书馆:

图书馆

   class DLLEXPORT LibraryClass
    {
    private:
      int _id;
      static int _last_id;
    public:
      LibraryClass();
      bool operator == (const LibraryClass t)
      {return _id == t._id;}
    };

库.cpp
#include "Library.h"

int LibraryClass::_last_id = 0;

LibraryClass::LibraryClass()
_id(_last_id)
{
++_last_id;
}

它能正常工作吗?我在Visual Studio中收到C4835警告,但似乎可以正常工作。有谁知道它如何在其他编译器上工作(我对linux gcc和mac gcc感兴趣)?这种模式是否还有另一个“有效”实现?

最佳答案

您的语法很好,这不会在代码中引起任何问题;我认为在编译此文件时,您不会在UNIX / MAC系统上看到任何警告(除了您正在执行面向Windows的DLL导出的事实外)。我相信您只是看到托管C++的影响。

从MSDN:



在Unix上编译时,您的静态数据成员将位于程序的初始化测试段中。确保将其初始化为执行前提供的值,因此它将从0开始,并且在调用它时将在构造函数中完全可用。

关于c++ - 库和C++中的导出静态变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10756624/

10-11 16:25