静态变量是否可以在C ++中不存在类?

时间:2012-02-08 20:57:41

标签: c++

静态变量是否可以存在于C ++中除了类之外的任何地方?如果是这样,他们表现出什么样的行为?我假设它们没有在实例之间共享,因为没有对象。

5 个答案:

答案 0 :(得分:3)

静态对象的生命周期是程序的生命周期,如果变量在文件范围内声明,则对象的链接是内部的(如果在块作用域中定义,则没有链接)。

答案 1 :(得分:1)

在函数外部,static表示该编译单元的本地。您可以使用匿名命名空间实现相同的效果。

答案 2 :(得分:1)

当然,当然,例如:

int sequence()
{
    static int result = 0;
    return ++result;
}

因此,在这里,结果变量将继续存在于函数范围之外,并且每次进入函数时都会不断增加。

答案 3 :(得分:1)

另外两个地方:

  1. 全局变量和函数

    • 全局static个变量(或函数)是该编译单元的本地变量,不能被"看到"来自其他编辑单位
  2. 本地变量

    • static局部变量在第一次超过它们的声明时初始化一次(这对于仅在第一次调用函数时执行操作很有用),之后它们保留其值,即使在函数已返回并再次调用
  3. 请注意,static的这些不同用法实际上彼此无关。 static表示不同的用途,具体取决于您使用它的位置,与const非常相似。

答案 4 :(得分:0)

这取决于静态变量的含义。 static关键字具有不同的语义,具体取决于您使用它的情况。

成员变量在声明为静态时具有静态存储持续时间。这意味着这些变量的生命周期持续到程序的持续时间。这是“静态变量”的常见含义。有3种情况,变量将具有静态存储持续时间:

  1. 在本地(函数范围)变量上使用static关键字时。
  2. static关键字应用于类成员变量时。
  3. 任何没有动态或线程存储持续时间且不是局部变量的变量。
  4. 示例:

    struct foo
    {
      static int x; // This has static storage duration
    };
    
    void bar()
    {
      static int y = 5; // This has static storage duration
    }
    
    int z = 1; // This has static storage duration
    

    所以回答你的问题好像是“当一个类的成员可以变量有静态存储持续时间吗?”时,答案是肯定的。默认情况下,全局或命名空间范围变量具有静态存储持声明为static的函数作用域变量也具有静态存储持续时间。

    但是,static关键字在全局或命名空间范围内的变量上使用时具有另一种含义。对于这些,static指定变量具有内部链接。也就是说,它们只能在同一个翻译单元中引用。

    示例:

    static int i = 5; // This has internal linkage