当前位置: 首页 > 知识库问答 >
问题:

这些示例中的“静态”关键字是否有所不同?[重复]

索令
2023-03-14

我刚刚意识到我让一个班级成员不必要地保持静态。我想知道这是否有意义,或者它们之间有什么区别。所以我有:

struct Log
{
    int a;
    std::string text;
};

struct GUI
{
    GUI() = delete;
    static void doSomething() {}
    static inline int a;
    static inline Foo fooObj;
};

struct GUI2
{
    GUI2() = delete;
    static void doSomething() {}
    int a;
    Foo fooObj;
};

所以你可以看到,这个GUI类总是通过作用域操作符GUI::而不是点成员操作符来访问,我不会创建它的任何实例,它是完全静态的。因此,两个GUI类中的int和Foo对象要么有“static”关键字,要么没有。在GUI类不会被实例化的情况下,我不相信这会有什么不同。作为一种最佳实践,是否最好不使用static关键字?另外,如果两者之间有什么区别呢?我只是注意到我觉得这对我来说没什么区别。

共有1个答案

缪修德
2023-03-14
struct GUI2
{
    GUI2() = delete;
    static void doSomething() {}
    int a;
    Foo fooObj;
};

int main() {
    GUI2::a = 0; // error
}

如果GUI2::a不是静态成员,那么它只存在于GUI对象中。这意味着不能使用GUI2::a访问它,因为类没有附加a的实例。您需要一个实例:

GUI2 gui;
gui.a = 0; // OK

如果GUI2::a是静态成员,则它与对象分离并独立存在(并且必须使用int GUI::a;某处这样定义):

GUI2::A = 0; // OK

这些例子中的“static”关键字有区别吗?

是的。

 类似资料:
  • 本文向大家介绍Java中的静态关键字,包括了Java中的静态关键字的使用技巧和注意事项,需要的朋友参考一下 静态修饰符 静态变量 在静态关键字用于创建将独立存在的类创建的所有实例变量。无论类的实例数量如何,静态变量只有一个副本存在。 静态变量也称为类变量。局部变量不能声明为静态。 静态方法 static关键字用于创建将独立于为该类创建的任何实例存在的方法。 静态方法不使用定义它们的类的任何对象的任

  • 我的问题是关于一个类的静态关键字的应用。因为对于实例、变量和方法应用static关键字很容易,但是对于类应用static关键字则不起作用。最后请帮我解一下代码

  • 问题内容: 在另一个问题中,用户指出该关键字使用很危险,并提出了不使用该对象创建对象的解决方案。我不相信这是真的,主要是因为我使用了Prototype,Scriptaculous和其他出色的JavaScript库,并且每个人都使用了关键字。 尽管如此,昨天我还是在DouglasCrockford在YUI剧院观看了一次演讲,他说的一模一样,他不再在代码中使用关键字(JavaScript上的Crock

  • 考虑下面的一段代码,它基本上是Meyer的单例的一个例子(希望如此) 第1行提到的static关键字没有意义吗?如果是,为什么?

  • 问题内容: 美好的一天, 当我运行此代码时: 它创建以下异常: 但是,如果我在顶部的Label之前删除static关键字,则代码可以正常运行。 我的问题是:为什么在创建静态标签而不是静态矩形时会发生错误?我希望Label是静态的,而不是类的对象。 问题答案: 为什么创建a 而不创建a时会发生错误? 本质上,这是初始化顺序的问题。创建对象时,需要正确初始化UI平台。潜在地,它也可能发生在上,但很可能