在函数中声明静态变量有什么用?

enz*_*m83 4 c c++ variables static

在函数中声明静态变量的实用性是什么?我理解在函数中声明的静态变量的生命周期,但是我无法想象一个在函数中声明静态变量可能有用(或必要)的实际示例.你能给我一个应该以这种方式解决的问题的例子吗?

Che*_*Alf 6

通过在函数中声明一个静态变量,你

  • 限制变量的范围,和

  • 延迟动态初始化到第一次执行通过声明.

在某些情况下,有限的范围是最重要的,例如对于局部常数.

在其他情况下,延迟动态初始化是最重要的,例如对于迈耶斯的单身人士.


一个实际的用例是在头文件中定义具有有效外部链接的任意类型的常量(以便它不会在每个转换单元中重复),如

inline
auto get_t()
    -> T const&
{
    static T const the_t;
    return the_t;
}

T const& t = get_t();
Run Code Online (Sandbox Code Playgroud)

这里参考占用最小空间.

然而,这也可以通过"模板化常量"技巧或在C++ 11中通过constexpr(如果适用)来完成.

为了比较,这里与上面用"模板常量"技巧表达的相同(再次,目的是在头文件中提供extern链接常量):

template< class Dummy >
struct The_t_constant
{
    static T const value;
};

template< class Dummy >
T const The_t_constant<Dummy>::value;

T const& t = The_t_constant<void>::value;
Run Code Online (Sandbox Code Playgroud)