要创建持久变量,最好是拥有本地静态变量还是全局变量?

cod*_*der 8 c c++ static

假设你有一个类(c ++)或模块(单个c文件).然后在你的一个函数中,你想要存储一个变量的副本并保持它的值,直到下次调用该函数为止,是否更好地拥有一个全局(在c ++中可以是私有的而在c中不是extern'd)它在模块范围内)还是制作一个局部静态变量?

例如:

void some_func_that_does_not_do_anything_useful(int arbVal)
{
    static int lastArbVal = 0;

    if (arbVal > lastArbVal)
    {
        lastArbVal = arbVal;
    }
}
Run Code Online (Sandbox Code Playgroud)

我制作静态的原因是为了尽可能地保持其范围,但我读到的某些内容建议你应该使用全局变量,所以现在我很困惑.

什么是最好的(如果有的话)?,利弊?

Yu *_*Hao 10

这里的规则很简单:如果变量需要由多个函数访问,请将其设置为全局.如果不是,static函数内部的变量通常更好.其中一个优点是避免污染全局命名空间.

请注意,如果不需要在文件外部访问全局变量,最好将其声明为文件范围变量(即,将其声明为static)

回到你的例子,我认为最static好像你已经做的那样使用变量.

  • 文件范围`static`可能不合适的另一个原因是静态初始化顺序.如果在从不同翻译单元初始化其他静态期间调用使用它的函数,那么您就会遇到麻烦. (2认同)