catalog
static变量, 错误使用
class ST{
public:
void func(){
static Foo t;
}
};
int main(){
ST t0; t0.func();
ST t1; t1.func();
ST t2; t2.func();
}
这种写法, 其实只有Foo
对象!!! (即, 不同的类对象 的static变量, 是同一个)
本质来讲, (类的成员函数), 其实和 (普通全局函数) 是一样的!!! 即, 所有类的对象, 他都共享同一个 (成员函数地址)
所以, 你把 以上代码中, (成员函数func
) 看做是 (全局函数), 就理所当然了
for( int i = 0; i < 10; ++i){
static ST obj( i);
}
这种写法, 其实只有一个ST obj( 0)
的对象!!!
void func( int _id){
static ST obj( _id);
}
func( 0);
func( 1);
func( 2);
这种写法, 其实只有一个ST obj( 0)
的对象!!!
void func(){
static ST obj0( 0);
static ST obj2( 0);
static ST obj3( 0);
}
这种写法, 是有 3个 ST( 0)
对象
void func(){
{
static ST obj( 0);
}
{
static ST obj( 0);
}
{
static ST obj( 0);
}
}
这种写法, 是有 3个 ST( 0)
对象
所以, static对象的使用, 和 普通对象, 真的是, 非常非常的不同!!! 要怎么区分呢?
你写了几个static
关键字, 就意味着: 有几个对象
比如有一个需求: (对于func( _id)函数, 每次调用, 相同的_id 都是同一个static对象; 否则, 是不同的对象)
void func( int _id){
if( _id == 0){
static ST obj( _id);}
if( _id == 1){
static ST obj( _id);}
if( _id == 2){
static ST obj( _id);}
if( _id == 3){
static ST obj( _id);}
if( _id == 4){
static ST obj( _id);}
....
' 等等... 你都得手动一个个写 '
}
总之要牢记, 你 (显式)的 写了几个static
, 就有几个对象
static/extern函数
全局函数
a.h:
static void F();
a.cpp:
static void F(){
aaa}
此时, 在a.cpp
里的 其他函数里, 使用F()
函数 是可以的
但是, 如果在其他x.cpp
文件里, #include "a.h"
后, 使用F()
函数, 是报错的!!! undefined reference to
F()’`
你需要, 在x.cpp
里, 也去实现他static vo