C++ 库中的静态值对于所有对象都是相同的值吗?
假设我正在尝试生成特定于流程的id: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()
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(指针)。