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();
}
///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();
}

浙公网安备 33010602011771号