我对静态成员混乱我的标题不感兴趣,因为它只能被cpp体中的自由函数使用。如果我在这里声明一个静态变量,它只会占用一个地址,就像静态成员一样吗?
道歉但是C ++中无数的静态用法让我非常不确定。
我正在思考:
static Osp::Base::Runtime::Monitor sharedMonitor;
答案 0 :(得分:2)
是。如果在命名空间范围内定义静态变量,则该变量有一个实例,可在其定义的转换单元中访问。
答案 1 :(得分:0)
首先,“静态”一词在C ++中有两个含义:它可以指代
关键字static
(根据位置反过来具有不同的效果)
它被使用),或者它可以指变量的生命周期:全部
在命名空间定义的变量具有静态生存期。
根据你的说法,我认为你正在寻找一个带静态的变量 生命周期,在单个翻译单元之外是不可见的 它出现的地方。这样做的首选方法是定义一个 未命名的命名空间中的变量:
namespace {
int myWhatever; // No keyword static...
}
声明为static
的类成员变量也具有静态
生命周期,声明的局部变量(在函数内)也是如此
static
。
这个变量在定义之后随处都可以访问
翻译单位,但没有其他地方。它有一个单一的实例
在程序开始时出现,持续时间长
该程序运行。如果它有一个构造函数,那么构造函数就是
在main
之前调用(或者在加载动态对象时,如果是动态的话)
使用链接),它的析构函数将在exit
之后调用
被调用(或者当动态对象被卸载时,如果是动态链接
使用)。
关于线程,C ++ 11有一个存储类说明符
thread_local
:使用此说明符声明的变量有一个实例
每个线程,其生命周期相当于
线。它将在首次使用之前初始化(构建),并且
线程退出时被破坏。这是不同的
静态的。