静态变量是否可以存在于C ++中除了类之外的任何地方?如果是这样,他们表现出什么样的行为?我假设它们没有在实例之间共享,因为没有对象。
答案 0 :(得分:3)
是
静态对象的生命周期是程序的生命周期,如果变量在文件范围内声明,则对象的链接是内部的(如果在块作用域中定义,则没有链接)。
答案 1 :(得分:1)
在函数外部,static表示该编译单元的本地。您可以使用匿名命名空间实现相同的效果。
答案 2 :(得分:1)
当然,当然,例如:
int sequence()
{
static int result = 0;
return ++result;
}
因此,在这里,结果变量将继续存在于函数范围之外,并且每次进入函数时都会不断增加。
答案 3 :(得分:1)
另外两个地方:
全局变量和函数
static
个变量(或函数)是该编译单元的本地变量,不能被"看到"来自其他编辑单位本地变量
static
局部变量在第一次超过它们的声明时初始化一次(这对于仅在第一次调用函数时执行操作很有用),之后它们保留其值,即使在函数已返回并再次调用请注意,static
的这些不同用法实际上彼此无关。 static
表示不同的用途,具体取决于您使用它的位置,与const
非常相似。
答案 4 :(得分:0)
这取决于静态变量的含义。 static
关键字具有不同的语义,具体取决于您使用它的情况。
成员变量在声明为静态时具有静态存储持续时间。这意味着这些变量的生命周期持续到程序的持续时间。这是“静态变量”的常见含义。有3种情况,变量将具有静态存储持续时间:
static
关键字时。static
关键字应用于类成员变量时。示例:
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