在非成员函数中声明全局变量

时间:2014-05-14 12:44:06

标签: c++

我可以在非成员函数中声明一个全局变量吗?

或换句话说,非成员函数的静态等价物?

我希望变量不是常量 - 例如修改...

2 个答案:

答案 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内访问。

  

我希望变量不是常量 - 例如修改...

这与您声明/定义变量的位置完全正交。