我正在编写的程序中有几个函数,它们使用我需要用非常慢的函数计算的值。每次重新运行程序时该值都会改变,因此我不能只存储静态值。下面是一个例子。

void this_gets_called_frequently()
{
    static int value = slow_function();

    //do stuff with the above value
}

我这里的主要问题不是程序不工作,而是整洁。我真的不想初始化一个全局变量并将值存储在其中,因为它一旦计算就不会改变。按照上面的方式使用 static 关键字是否只会调用上面的函数计算一次?在那里添加 const 关键字会有帮助吗?

谢谢大家,这个问题已经完美回答了!

有帮助吗?

解决方案

是的,本地的初始化 static 变量最多会发生一次(尽管我记得某些编译器版本可能存在多线程问题)。const 不是必需的,在这种情况下,这主要是可读性和品味的问题。

其他提示

按照上面的方式使用 static 关键字是否只会调用上面的函数计算一次?

是的,在第一次调用时 this_gets_called_frequently

在那里添加 const 关键字会有帮助吗?

不。但添加 const 为文档价值。

使用可以使用C ++ 11的线程局部变量,如果您的编译器中可用。如果您在Windows上,则可以使用类似的TlsAlloc API。自从Win32的黎明以来就在那里。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top