static是如何使用ClassA::m_variable处理所有类对象的
How did static work with all class objects using ClassA::m_variable?
我们最近发现了由此错误引起的项目问题:
namespace sim
{
class ClassA
{
private:
static std::list<uint16_t> m_variable;
}
std::list<uint16_t> ClassA::m_variable;
}
m_variable对于ClassA的所有实例都变为静态,而不仅仅是对于它的特定实例。
为什么会发生这种情况?
在您发表评论后,您想了解如何使用类的静态成员。
对于普通数据成员,该类的每个实例中都存在该成员的一个实例。OTOH静态数据成员只存在一次,并且在类的所有对象实例之间共享。
简单地说,类定义中静态成员的简单声明只是一个声明。由于一个定义规则,该对象还需要定义。
在C++语言中,该定义通常出现在类定义之外,因此需要std::list<uint16_t> ClassA::m_variable;
行。
该规则有一个例外,主要是对于可以在类定义中定义的静态const积分成员,前提是您只使用它们的值而不使用它们的地址(如果您想更进一步,请搜索One definition rule(。但这是一个相当高级的角落案例,所以如果你是初学者,请记住类的静态成员需要类定义之外的定义。
相关文章:
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用对C函数和类对象的外部调用来处理C++头文件
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 使用对象数组对 SFML 进行动画处理
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 使用对象的基类部分模板专用化对对象进行哈希处理::哈希
- C++:处理线程本地对象销毁
- 传递多处理.将对象值为 ctype 函数?
- 我将如何在C++中文件处理对象(存储/导入)
- 使用多线程处理对象数组 - 无效使用 void 表达式错误
- 我如何有boost.python调用一个函数来处理对象
- 使用std::function和std::bind来存储回调并处理对象删除
- 如何编写一个可以处理对象或指针函数调用的模板函数
- 为什么C++操作优先级在处理对象或基元类型++a*b/b--a时不同
- 通过引用、指针或迭代器处理对象的函子
- 设计用于处理对象的管道
- 用c++处理对象
- 在 CPP 中处理对象时出错
- 如何最好地处理对象初始化C++:空构造函数或指针
- C++如何处理对象组合中出现的错误