成员函数中的静态变量

时间:2019-09-15 20:08:45

标签: c++

我上了这个课:

#include <cstdio>
#include <cstring>

class Number
{
    int data;
public:
    int get()
    {
        return data;
    }
    char* to_str(int& size)
    {
        static char str[10];
        snprintf(str, 10, "%d", data);
        size = strlen(str) + 1;
        return str;
    }
};

我知道返回静态数组很危险(即,不是线程安全的,等等),而且由于我使用的是C ++,所以我应该使用std::string

我对这里的工作感兴趣。由于每个方法仅被编译一次,并且所有对象随后都使用其代码(通过不可见的第一个参数,可通过this指针访问),这使我感到困惑:每个对象唯一的静态数组是唯一的是该类的对象,还是所有对象都共享它?同样,我对机制(出于学习目的)感兴趣,而不是对良好的编码习惯感兴趣(上面的代码绝对不是良好的代码)。

1 个答案:

答案 0 :(得分:2)

  

由于每个方法仅被编译一次

鉴于它是一个内联定义(假设您的类位于标头中,并且包含在多个翻译单元(TU)中),因此它经过多次编译。

如果您在TU(.cpp文件中提供定义),那么您是对的。

  

及其所有对象然后使用其代码(通过不可见的第一个参数(可作为this指针访问)

请注意,this指针与是否共享静态数据成员和静态局部变量无关,无论程序中是否共享代码。

  

该静态数组对于该类的每个对象都是唯一的还是对所有对象都共享?

方法(成员函数)中的静态局部变量是唯一的,即在所有实例之间共享(与任何其他函数相同)。