本来的一个想法是C++ 的类的成员函数是属于这个类的,那么这个类的成员函数中的静态变量也是属于这个类的。不过越想越感觉不对劲,于是写了个测试代码,试了一下。还真不对,结果是类的成员函数中的静态变量,他的作用域是这个成员函数,不管是不是这个类的同一个实例化对象,他们都共用这一个静态变量。也就是说函数的静态变量还是跟C 一样的解释。
其实这样想法真的挺傻,用一个私有成员变量就可以处理为每一个实例化对象都有自己的操作变量了,而不需要声明和定义一个静态变量。
直接给出测试代码吧。
// test.h
#ifndef TEST_H
#define TEST_H
class clsTest
{
public:
clsTest() {}
~clsTest() {}
void func() const;
};
#endif // TEST_H
<pre name="code" class="cpp">// test.cpp
#include "test.h"
#include <iostream>
void clsTest::func() const
{
static int sTestNum = 0;
std::cout << "sTestNum = " << ++sTestNum << std::endl;
}
// main.cpp
#include <iostream>
#include "test.h"
int main(int argc, char *argv[])
{
clsTest test01;
clsTest test02;
std::cout << "test01 ########################" << std::endl;
test01.func();
test01.func();
test01.func();
test01.func();
std::cout << "test01 ########################" << std::endl;
std::cout << "test02 ########################" << std::endl;
test02.func();
std::cout << "test02 ########################" << std::endl;
return 0;
}
// 运行结果
test01 ########################
sTestNum = 1
sTestNum = 2
sTestNum = 3
sTestNum = 4
test01 ########################
test02 ########################
sTestNum = 5
test02 ########################