为什么不同于类的其他成员,我们为什么需要定义类的静态变量?

阿迪亚S

每当我们有一个带有静态成员变量的类时,为什么我们需要对其进行定义?

为什么我们不能直接使用它?

我想看看如果不定义静态变量,是否会分配任何内存空间,所以我写了这段小代码,看来确实为该变量分配了内存。

#include <iostream>
using namespace std;
class A
{
    public:
    int a;
    static int b;
};
// int A::b = 1;
int main() 
{
    cout<<sizeof(A::b);
    return 0;
}

输出:

4

现在,我定义了变量并对其进行了初始化(未注释int A :: b = 1;行),并运行了相同的代码,即使这次输出是相同的。

那么,定义它的目的是什么?

莫桑·阿里(Mohsan Ali)

对于静态数据成员,您必须在实现中为其分配内存,您现在所做的并不分配内存,而只是获得的大小int在C ++ 17中,您可以声明内联静态变量,因为int其默认值为零,但您可以设置任何所需的值。像这样:

 static inline int b=4;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我们在类中声明静态变量,而在类外部定义?

来自分类Dev

(为什么)我们可以在初始化时将非静态类成员分配给静态变量?

来自分类Dev

Python,为什么我们可以创建类创建中未定义的类变量?

来自分类Dev

为什么我们可以使用指针访问私有数据成员类,而不使用类中的其他成员,朋友功能?

来自分类Dev

为什么我们需要Java中的Properties类?

来自分类Dev

为什么constexpr静态成员(类型类)需要定义?

来自分类Dev

为什么需要在类外部定义静态数据成员?

来自分类Dev

为什么我们可以返回对类成员变量的引用

来自分类Dev

自定义异常类-我们为什么需要它?

来自分类Dev

为什么在类外部用静态变量的重新声明来初始化静态变量?我们不能只初始化它而不是重新声明它吗?

来自分类Dev

为什么需要明确定义静态变量?

来自分类Dev

为什么我会坚持使用不同于KDE或其他桌面环境的GNOME Shell版本?

来自分类Dev

为什么我会坚持使用不同于KDE或其他桌面环境的GNOME Shell版本?

来自分类Dev

为什么Python类无法识别静态变量

来自分类Dev

为什么我们需要抽象类而不是虚拟类?

来自分类Dev

如果包装器类已经不可变,为什么我们需要Atomic *类?

来自分类Dev

为什么我们要创建一个单独的函数来检测其他类的输入

来自分类Dev

为什么ADL对操作员功能的行为不同于其他功能?

来自分类Dev

为什么我的静态变量实例化的类的宽度为0

来自分类Dev

为什么我们不能在.Net中创建静态类的实例

来自分类Dev

为什么我们不能在扩展类的静态方法中使用此实例?

来自分类Dev

为什么我们不能在没有公共成员函数的情况下访问类外部的私有静态成员?

来自分类Dev

为什么“包含”在全局上下文中的行为不同于在类中的行为?

来自分类Dev

为什么“包含”在全局上下文中的行为不同于在类中的行为?

来自分类Dev

为什么我们需要声明枚举变量?(C)

来自分类Dev

为什么我们需要将Apply和Applicative类型类分开?

来自分类Dev

为什么我们需要在famo.us中使用TransitionableTransform类?

来自分类Dev

为什么我们在python中的每个方法上都需要相应的类函数?

来自分类Dev

Android:扩展应用程序类。为什么我们需要实现单例模式?

Related 相关文章

  1. 1

    为什么我们在类中声明静态变量,而在类外部定义?

  2. 2

    (为什么)我们可以在初始化时将非静态类成员分配给静态变量?

  3. 3

    Python,为什么我们可以创建类创建中未定义的类变量?

  4. 4

    为什么我们可以使用指针访问私有数据成员类,而不使用类中的其他成员,朋友功能?

  5. 5

    为什么我们需要Java中的Properties类?

  6. 6

    为什么constexpr静态成员(类型类)需要定义?

  7. 7

    为什么需要在类外部定义静态数据成员?

  8. 8

    为什么我们可以返回对类成员变量的引用

  9. 9

    自定义异常类-我们为什么需要它?

  10. 10

    为什么在类外部用静态变量的重新声明来初始化静态变量?我们不能只初始化它而不是重新声明它吗?

  11. 11

    为什么需要明确定义静态变量?

  12. 12

    为什么我会坚持使用不同于KDE或其他桌面环境的GNOME Shell版本?

  13. 13

    为什么我会坚持使用不同于KDE或其他桌面环境的GNOME Shell版本?

  14. 14

    为什么Python类无法识别静态变量

  15. 15

    为什么我们需要抽象类而不是虚拟类?

  16. 16

    如果包装器类已经不可变,为什么我们需要Atomic *类?

  17. 17

    为什么我们要创建一个单独的函数来检测其他类的输入

  18. 18

    为什么ADL对操作员功能的行为不同于其他功能?

  19. 19

    为什么我的静态变量实例化的类的宽度为0

  20. 20

    为什么我们不能在.Net中创建静态类的实例

  21. 21

    为什么我们不能在扩展类的静态方法中使用此实例?

  22. 22

    为什么我们不能在没有公共成员函数的情况下访问类外部的私有静态成员?

  23. 23

    为什么“包含”在全局上下文中的行为不同于在类中的行为?

  24. 24

    为什么“包含”在全局上下文中的行为不同于在类中的行为?

  25. 25

    为什么我们需要声明枚举变量?(C)

  26. 26

    为什么我们需要将Apply和Applicative类型类分开?

  27. 27

    为什么我们需要在famo.us中使用TransitionableTransform类?

  28. 28

    为什么我们在python中的每个方法上都需要相应的类函数?

  29. 29

    Android:扩展应用程序类。为什么我们需要实现单例模式?

热门标签

归档