C++中static用法总结(一)

1.局部静态变量(对象)
///local_static.cpp
#include<iostream>
using namespace std;
int get_next()
{
    static int i = 0; //Note
    return i++;
}
int main()
{
    cout<<get_next()<<endl;
    cout<<get_next()<<endl;
    cout<<get_next()<<endl;
}
///end file
这里值得注意的是只有在第一次调用get_next()函数时该函数的第一行(标有//Note的行)语句才会被调用,而其他行则每次都会被调用。
所以,如果对于局部静态变量i的定义和初始化分开则达不到预期的效果。比如把函数get_next 修改成下面的形式
int get_next()
{
    static int i;
    i = 0;
    return i++;
}

对于静态对象是类似的
///local_static_object.cpp
class X
{
private:
    int i;
public:
    X(int val = 0) : {i = val;}
    void set(int val) {i = val;}
    int get_and_increase() {return i++;}
}

int get_next()
{
    static X i(0);
    return i.get_and_increase();   
}
///end file
同样,如果把get_next()函数修改成这样也是达不到效果的
int get_next()
{
    static X i;
    i.set(0);
    return i.get_and_increase();
}
posted @ 2008-04-05 18:12  刀刀  阅读(927)  评论(0)    收藏  举报