【问题标题】:static keyword inside a class and outside it类内部和外部的静态关键字
【发布时间】:2012-08-27 23:57:48
【问题描述】:

static关键字一般与内部链接有关,但类内部使用的static关键字有外部链接对吗?下面的变量 m、n 可以在类文件之外访问。

class c {
    int i;
    int j;
    static int m;
    static int n;

    public:
    void zap();
    static void clear();
};

【问题讨论】:

  • static 成员属于;对于变量,它们可以在没有对象的情况下访问并在实例之间共享,例如struct Foo { static void *bar; static void *fu(); },所以Foo::barFoo::fu 是合法的。
  • 标准没有严格要求,但可能(或可能不会!)有助于将静态成员视为在编译时设置的固定地址意义上的静态成员,而非静态成员数据可以放在堆栈或堆中的各种运行时确定的地址。 static 成员基本上类似于全局变量,只是它们的标识符属于声明它们的类的范围。

标签: c++ static


【解决方案1】:

没错。

关键字static 重载了太多不同的含义:

  • 在命名空间范围内的变量或函数上,它提供名称内部链接。
  • 在类成员上,它使其成为静态成员,这不会影响链接。
  • 在函数范围内的变量上,它为变量提供“静态存储持续时间”,而不是“自动”或“动态”存储持续时间(即变量的生命周期延长到程序的末尾,就像全局变量一样。)李>

【讨论】:

【解决方案2】:

正如我在my comment 中所述,static 成员仅与 相关联,而不是与单个对象相关联。

static 成员属于;对于变量,它们可以在没有对象的情况下访问并在实例之间共享,例如

struct Foo {
  static void *bar;
  static void *fu();
}

所以Foo::barFoo::fu 是合法的。

它们在 C++03 标准的 §9.4 中介绍;

  1. 类的数据或函数成员可以在类定义中声明为static,在这种情况下,它是类的静态成员

    李>
  2. X 类的 static 成员 s 可以使用 qualified-id 表达式 X::s 来引用;不必使用类成员访问语法 (5.2.5) 来引用 static 成员。 static 成员可以使用类成员访问语法来引用,在这种情况下,object-expression 被评估

    class process {
    public:
        static void reschedule();
    };
    process& g();
    
    void f()
    {
        process::reschedule(); // OK: no object necessary
        g().reschedule(); // g() is called
    }
    

    static 成员可以在其类的范围内或从其类派生的类的范围内直接引用(第 10 条);在这种情况下,static 成员被称为好像使用了 qualified-id 表达式,qualified-的 nested-name-specifier id 命名引用 static 成员的类范围。

    int g();
    struct X {
        static int g();
    };
    struct Y : X {
        static int i;
    };
    int Y::i = g(); // equivalent to Y::g();
    

    ...

【讨论】:

    【解决方案3】:

    您可以说静态成员是类的成员,而不是任何特定的对象实例。也就是说,它们对于所有对象实例具有相同的值。

    静态成员函数虽然没有值,但在其他方面是相同的。它们不是对每个对象实例都是唯一的,而是可以看作是类的一部分。这意味着他们没有this指针,无法访问非静态成员变量。

    【讨论】:

    • 成员函数通常不具有。 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    相关资源
    最近更新 更多