为什么我们需要定义类的静态变量,而在函数内部不定义静态变量呢?

阿萨德汗

代码 1:

#include<iostream>

class Singleton
{
private:
    static Singleton instance; //declaration of static variable

public:
    static Singleton &GetInstance()
    {
        return instance;
    }
    void Hello()
    {
        std::cout << "Hello!";
    }
};

Singleton Singleton::instance; //definition of static variable

int main()
{
    Singleton::GetInstance().Hello();
}

代码 2:

#include <iostream>

class Singleton
{
public:
    static Singleton &GetInstance()
    {
        static Singleton instance; //declaration of static variable
        return instance;
    }
    void Hello()
    {
        std::cout << "Hello!";
    }
};

int main()
{
    Singleton::GetInstance().Hello();
}

在代码 1 中,我们需要定义静态变量,但在代码 2 中,我们只是在函数 Singleton::GetInstance&() 中声明了静态变量,然后返回它。代码 2 中的声明和定义是否在同一行?为什么?

索比克森

静态成员变量 instance声明内部class Singleton代码1是一个类变量

这意味着无论 的不同实例的状态如何,对于class Singleton该特定类的所有对象/实例,静态变量的状态都将保持不变。因此,它需要在类之外定义。(就像一个全局变量,可用于所有范围的功能。)。即使您不创建任何实例,也会在内存中分配静态成员变量的单个副本。它们的定义贯穿整个文件。

代码 2 中,静态变量instance不是类变量,而只是静态成员函数内的局部变量因此不需要在外部定义它,因为它的范围仅限于static Singleton &GetInstance()功能。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在引用静态变量时包括类名?

C函数内部的静态变量

我们可以在构造函数内部初始化静态变量吗?

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

我可以从外部访问函数内部的静态变量吗

为什么在此C程序中将全局变量定义为静态变量?

为什么要重置全局定义的静态变量?

不在函数之外的“静态定义”全局静态变量

函数内部的静态变量

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

为什么非常数静态变量需要在类外部初始化?

链接错误:静态变量的多个定义

如何在JS类中定义静态变量

Python:通过使用其他静态变量来定义静态类变量

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

为什么分配我的静态变量后未定义?

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

多个类需要访问静态变量

为什么我们不能在静态内部类中定义main函数?

为什么我创建的自定义异常会导致非静态变量错误?

在C ++之类的函数中定义静态变量

如何定义从结构继承的静态变量?

我在单例类中需要静态变量吗?

PHP静态变量内部函数

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

为什么在cpp文件中定义了非int const静态变量?

访问函数内部的静态变量

无法在静态类函数内递增静态变量

Rust 中什么更好:定义一个静态变量以全局访问它或通过函数参数传递一个非静态变量?