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

这些例子中的“static”关键字有什么不同吗?[副本]

马弘和
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;
};

共有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中static关键字的用法有哪些? 问题答案: static 成员属于类而不是特定实例。 这意味着即使你创建了该类的一百万个实例,也没有创建任何实例,该字段仅存在一个实例[1]。它将被所有实例共享。 由于方法也不属于特定实例,因此它们不能引用实例成员。在给定的示例中,不知道应引用该类的哪个实例(以及该类的哪个实例)。成员只能引用成员。实例成员当然可以访问成员。 旁注:当然,成员

  • 我刚刚意识到我让一个班级成员不必要地保持静态。我想知道这是否有意义,或者它们之间有什么区别。所以我有: 或 所以你可以看到,这个GUI类总是通过作用域操作符GUI::而不是点成员操作符来访问,我不会创建它的任何实例,它是完全静态的。因此,两个GUI类中的int和Foo对象要么有“static”关键字,要么没有。在GUI类不会被实例化的情况下,我不相信这会有什么不同。作为一种最佳实践,是否最好不使用

  • 问题内容: 什么时候不宜在方法签名上使用Java中的static关键字?如果方法基于某些参数执行功能,并且不需要访问非静态字段,那么您是否不总是希望这些类型的方法都是静态的? 问题答案: 您 可能 不希望它为静态的一个原因是允许它在子类中被覆盖。换句话说,行为可能不取决于对象内的数据,而是取决于对象的确切类型。例如,您可能具有常规的集合类型,其属性将在始终可变的集合,始终不可变的集合中返回,并依赖

  • 本文向大家介绍关键字volatile有什么含意? 并给出三个不同的例子。相关面试题,主要包含被问及关键字volatile有什么含意? 并给出三个不同的例子。时的应答技巧和注意事项,需要的朋友参考一下 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存

  • 本文向大家介绍关键字volatile有什么含意?并给出三个不同的例子? 相关面试题,主要包含被问及关键字volatile有什么含意?并给出三个不同的例子? 时的应答技巧和注意事项,需要的朋友参考一下 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到 这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄