1. 程式人生 > >C++ 類成員函式中的靜態變數的作用域

C++ 類成員函式中的靜態變數的作用域

本來的一個想法是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 ########################