模式名称,将值存储为函数中的静态变量

时间:2014-10-21 15:11:08

标签: c++ static

为了向自己确认它有效,我写了下面的代码(是的,它非常难看):

#include <iostream>

int* static_int(int i)
{
    static int j;
    j = i;
    return &j;
}

int main ()
{
    int* s_int = static_int(5);
    static_int(6);
    std::cout << *s_int << std::endl;
}

代码按预期工作并打印6

目前,我想不出一个用例没有更好的方法做这样的事情,但我想知道,无论是否推荐,这个编程模式是否有定义命名

1 个答案:

答案 0 :(得分:1)

在c ++中,这不是一种非常常用的模式。通常,数据将存储在对象中,而不是作为函数的静态存储。但是,在这样的函数中声明的静态变量(仅包括线程安全性)只能创建一次。这对许多事情都很有用。例如,如果您考虑它,您创建的代码将创建一个整数单例:即此函数创建并返回对整数的引用,始终为相同的整数。无论调用函数多少次或多少个线程都是如此。只存在一个整数j的副本。您可以阅读有关单身人士模式的更多信息,只需谷歌,它就是众所周知的。另一个用途是确保只使用一个保护变量调用一些函数:

void output_guard(){
  bool guard = func_call_once();
}

这确保函数func_call_once只被调用一次,这通常很有用。