C++ 库中的静态值对于所有对象都是相同的值吗?

C++ 库中的静态值对于所有对象都是相同的值吗?,c++,static,shared-libraries,static-libraries,C++,Static,Shared Libraries,Static Libraries,假设我正在尝试生成特定于流程的id: class TestLib { public: static int n; static int generate_id(){ srand (time(NULL)); if (n == 0) n = rand() % 10 + 1; return n; }; }; 我有lib A和B,其中包括TestLib: class TEST_A { public: static void print()

假设我正在尝试生成特定于流程的id:

class TestLib
{
  public:
  static int n;

  static int generate_id(){
    srand (time(NULL));
    if (n == 0)
    n = rand() % 10 + 1;

    return n;
  };
};
我有lib A和B,其中包括TestLib:

class TEST_A
{
  public:
    static void print() {
      std::cout << "A" << TestLib::generate_id() << std::endl;
    };
};

class TEST_B
{
  public:
    static void print() {
      std::cout << "B" << TestLib::generate_id() << std::endl;
    };
};
类测试
{
公众:
静态无效打印(){
常规(链接)库将共享它们的静态变量,而动态库将各自获得它们自己的副本

希望您的源文件中有将
n
初始化为零的内容。

常规(链接)库将共享其静态变量,但动态库将各自获得其副本


希望您的源文件中有一些东西可以将
n
初始化为零。

不,除非您的程序是单线程的,否则不能保证这一点。否则对
generate\u id
的两个并发调用可能会覆盖彼此的结果。

不,除非您的程序是单线程的,否则不能保证这一点。否则,对
generate_id
的两个并发调用可能会重写彼此的结果。

无需将n初始化为零,所有全局(静态)变量都定义为0(int)、false(bool)、NULL(指针)。无需将n初始化为零,所有全局(静态)变量都定义为0(int)、false(bool)、NULL(指针)。