我可以在非成员函数中声明一个全局变量吗?
或换句话说,非成员函数的静态等价物?
我希望变量不是常量 - 例如修改...
答案 0 :(得分:6)
你可以在函数中声明一个全局变量:
void f() {
extern int i;
}
但如果你想使用它,你还需要在周围的命名空间中定义。
作为全球性,定义不必是相同的翻译单元,但受一种定义规则的约束。
如果在评论中指出,你实际上想要一个持久的局部变量,在第一次调用函数时初始化,那么这就是本地静态变量的行为:
void f() {
static int i = whatever(); // initialised the first time
i = something_else(); // the new value is preserved for next time
}
答案 1 :(得分:3)
我可以在非成员函数中声明一个全局变量吗?
您可以在函数内为命名空间级别全局变量提供声明。但我觉得你正在寻找别的东西而且没有得到正确的措辞:
或换句话说,非成员函数的静态等价物?
您可以在函数中声明(并定义)本地静态变量。其生命周期将超出函数的执行范围(即变量将用于下一个函数执行,依此类推)。
int nextValue() {
static int counter = 0;
return ++counter;
}
请注意,这不是全局,因为 global 意味着来自任何上下文的可访问性,并且此变量只能在nextValue
内访问。
我希望变量不是常量 - 例如修改...
这与您声明/定义变量的位置完全正交。