2012-02-08 100 views
-2

静态变量可以存在于C++中的任何地方,而不是在类中?如果是这样,他们展示了什么行为?由于没有任何对象,我认为它们不会在实例之间共享。静态变量是否可以在C++中不存在类?

+0

如果你downvote,说为什么 - 然后我就可以改善这个问题。这点很重要。 – SirYakalot 2012-02-10 10:36:15

回答

3

是的。

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

1

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

1

当然,当然,例如:

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

所以,在这里,结果变量将继续在功能范围之外的存在,并不断加大在每次进入该功能的时间。

1

其他两个地方:

  1. 全局变量和函数

    • 全球static变量(或函数)是局部的编译单元,不能“看到”从其他编译单元
  2. 局部变量

    • static第一次当它们的声明被第一次越过时,局部变量被初始化一次(这对于只在第一次调用一个函数时做事很有用),并且在那之后它们甚至在函数返回后仍保留它们的值并再次呼吁

注意的static这些不同的用途真的什么都没有做对方。 static意味着不同的事情取决于你在哪里使用它,很像const

0

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

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

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

例子:

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 int i = 5; // This has internal linkage 
相关问题