静态和非静态递归成员之间的差异
difference between static and non static recursive member
C 编程语言书籍提到以下:
在看到结构的完整声明之前,不可能声明结构的新对象。例如:
struct No_good {
No_good member; // error : recursive definition
};
这是一个错误,因为编译器无法确定no_good的大小。
但下面的代码正在为我编译。
struct No_good {
static No_good member; // OK: compiling
};
static
如何允许编译器知道member
的大小。afaik静态决定命名变量的存储类别。
您在No_good
类内无法拥有完整的No_good
成员的原因,正如Francois Moisan指出的那样,是因为它会是无限的递归并占用无限的空间。
No_good*
成员会没事
静态成员也可以,因为它并未在No_good
的每个实例中存储,而是由所有实例共享。从技术上讲,它不是对象的一部分,而是与No_good
的名称空间相关的东西。
希望这能清除。
您可以将静态变量视为全局变量。唯一的区别是它在班级的名称空间下。因此,如果它是一个全局变量,则可以像no_good一样达到它,但是如果它是静态的,则必须键入no_good :: no_good。您也可以做到这一点,即使您永远不会实例化班级。
与静态有关的Globals可能会遇到的麻烦。您永远不会知道哪种静态变量首先初始化,如果它们彼此依赖,您仍然遇到麻烦。
我体验它的方式,许多静态用法来自编写C 代码。
相关文章:
- C++两个源文件之间共享的枚举的静态实例
- 类内部和外部静态 constexpr 元组之间的差异
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 非类类型表达式的静态类型与动态类型之间的差异
- 将基类分配给派生对象,反之亦然,以C++以及静态和动态对象之间的差异
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- 动态分配的数组和静态数组之间的区别
- Visual Studio 中静态库项目之间的未解析外部
- 指向 POD 类型的指针之间的静态转换与重新解释转换
- C 函数中的静态和 C++ 中类中的静态之间的区别?
- C++ 静态成员变量 - 文件之间的访问
- 如何在标题和CPP之间拆分静态/模板类
- 静态模板类成员函数的这两个调用之间有什么区别?
- 使用静态类成员而不是私有字段之间的速度差异是什么?
- 返回本地静态的函数和返回静态成员的函数之间有什么区别(对象大小、性能等)?
- 特征库:计算倒数时静态和动态大小矩阵之间的不同行为
- 类中私有静态方法和私有方法之间的区别
- 共享和静态库之间使用差异
- 静态和非静态递归成员之间的差异
- C /此和静态类名称之间的差异