为了向自己确认它有效,我写了下面的代码(是的,它非常难看):
#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
。
目前,我想不出一个用例没有更好的方法做这样的事情,但我想知道,无论是否推荐,这个编程模式是否有定义命名
答案 0 :(得分:1)
在c ++中,这不是一种非常常用的模式。通常,数据将存储在对象中,而不是作为函数的静态存储。但是,在这样的函数中声明的静态变量(仅包括线程安全性)只能创建一次。这对许多事情都很有用。例如,如果您考虑它,您创建的代码将创建一个整数单例:即此函数创建并返回对整数的引用,始终为相同的整数。无论调用函数多少次或多少个线程都是如此。只存在一个整数j的副本。您可以阅读有关单身人士模式的更多信息,只需谷歌,它就是众所周知的。另一个用途是确保只使用一个保护变量调用一些函数:
void output_guard(){
bool guard = func_call_once();
}
这确保函数func_call_once只被调用一次,这通常很有用。