我上了这个课:
#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
指针访问),这使我感到困惑:每个对象唯一的静态数组是唯一的是该类的对象,还是所有对象都共享它?同样,我对机制(出于学习目的)感兴趣,而不是对良好的编码习惯感兴趣(上面的代码绝对不是良好的代码)。
答案 0 :(得分:2)
由于每个方法仅被编译一次
鉴于它是一个内联定义(假设您的类位于标头中,并且包含在多个翻译单元(TU)中),因此它经过多次编译。
如果您在TU(.cpp
文件中提供定义),那么您是对的。
及其所有对象然后使用其代码(通过不可见的第一个参数(可作为this指针访问)
请注意,this
指针与是否共享静态数据成员和静态局部变量无关,无论程序中是否共享代码。
该静态数组对于该类的每个对象都是唯一的还是对所有对象都共享?
方法(成员函数)中的静态局部变量是唯一的,即在所有实例之间共享(与任何其他函数相同)。