静态非成员变量,它是程序中所有线程的相同变量吗?

时间:2012-03-01 17:51:31

标签: c++ static static-variables

我对静态成员混乱我的标题不感兴趣,因为它只能被cpp体中的自由函数使用。如果我在这里声明一个静态变量,它只会占用一个地址,就像静态成员一样吗?

道歉但是C ++中无数的静态用法让我非常不确定。

我正在思考:

static Osp::Base::Runtime::Monitor sharedMonitor;

2 个答案:

答案 0 :(得分:2)

是。如果在命名空间范围内定义静态变量,则该变量有一个实例,可在其定义的转换单元中访问。

答案 1 :(得分:0)

首先,“静态”一词在C ++中有两个含义:它可以指代 关键字static(根据位置反过来具有不同的效果) 它被使用),或者它可以指变量的生命周期:全部 在命名空间定义的变量具有静态生存期。

根据你的说法,我认为你正在寻找一个带静态的变量 生命周期,在单个翻译单元之外是不可见的 它出现的地方。这样做的首选方法是定义一个 未命名的命名空间中的变量:

namespace {
int myWhatever;     //  No keyword static...
}

声明为static的类成员变量也具有静态 生命周期,声明的局部变量(在函数内)也是如此 static

这个变量在定义之后随处都可以访问 翻译单位,但没有其他地方。它有一个单一的实例 在程序开始时出现,持续时间长 该程序运行。如果它有一个构造函数,那么构造函数就是 在main之前调用(或者在加载动态对象时,如果是动态的话) 使用链接),它的析构函数将在exit之后调用 被调用(或者当动态对象被卸载时,如果是动态链接 使用)。

关于线程,C ++ 11有一个存储类说明符 thread_local:使用此说明符声明的变量有一个实例 每个线程,其生命周期相当于 线。它将在首次使用之前初始化(构建),并且 线程退出时被破坏。这是不同的 静态的。