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

标签 c++ c variables static

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

最佳答案

通过在函数中声明静态变量,您

  • 限制变量的范围,以及

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

在某些情况下,有限的范围是最重要的,例如为局部常量。

在其他情况下,延迟动态初始化是最重要的,例如对于 Meyers 的单例。


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

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

T const& t = get_t();

此处引用占用的空间最小。

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

为了比较,这里使用“模板化常量”技巧表达了与上面相同的内容(同样,目的是在头文件中提供外部链接常量):

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;

关于c++ - 在函数中声明静态变量有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23120948/

相关文章:

c++ - 在openGL中多次绑定(bind)缓冲区

C++ 和 Eclipse 项目 - 如何计算出要包含的 header 以及要转发声明的类

c - Ruby的排序是如何实现的?

c - 从捕获浮点异常返回

c++ - 如何在 std::future 的 vector 中调用异步函数?

C++ 地址簿

c++ - 直接访问PCI串口

variables - Oracle PL/SQL : How to find unused variables in a long package?

php - 根据 mysql 查询的结果定义变量和相应的值

在C中使用超出其范围的变量进行计算