今天在写游戏时,想了一个问题,当时在想,我给类的普通成员函数中定义一个局部静态变量,不同的类多次调用这个函数该变量副本是否都只有一个呢?
没测试之前,我觉得是一个,首先静态变量编译时已经确定好了,在静态全局区,而且类的成员函数也是编译时就已经存在了代码区,所有类使用成员函数时不过是调用代码区的函数而已,但想法总得验证。
测试代码比较简单,能看懂最重要,代码如下:
x.h
#pragma once
#include<iostream>
class x
{
public:
x();
~x();
void test()
{
static int a = 0;
std::cout << "a:" << a << ",地址:" << &a << std::endl;
a++;
}
};
x.cpp
#include "x.h"
x::x()
{
}
x::~x()
{
}
main.cpp
#include<iostream>
using namespace std;
#include"x.h"
int main()
{
x A, B;
A.test();
A.test();
A.test();
B.test();
return 0;
}
输出结果如下:
a:0,地址:00C60334
a:1,地址:00C60334
a:2,地址:00C60334
a:3,地址:00C60334
说明了确实只有一个a,所以定义变量要多想想能不能用,这样做后面再用会怎么样。