模式名称,将值作为静态变量存储在函数中
Pattern name, storing values as static variables in a function
为了向自己确认它有效,我写了以下代码(是的,它非常难看):
#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
。
目前,我想不出有什么用例没有更好的方法来做这样的事情,但我想知道,无论是否推荐,这种编程模式是否有一个定义的名称?
在c++中,这不是一个非常常见的模式。通常,数据将存储在对象中,而不是作为函数的静态数据。然而,像这样的函数中声明的静态变量(包括线程安全)保证只创建一次。这对很多事情都很有用。例如,如果你仔细想想,你创建的代码创建了一个整数单例:也就是说,这个函数创建并返回对一个整数的引用,总是相同的整数。无论函数被调用多少次或在多少线程中调用,这都是正确的。只有一个整数j的副本将永远存在。您可以阅读更多关于singleton模式的信息,只需在谷歌上搜索即可,这是众所周知的。另一个用途是确保某些函数只使用保护变量调用一次:
void output_guard(){
bool guard = func_call_once();
}
这样可以确保函数func_call_once只被调用一次,这通常很有用。
相关文章:
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 模板基类中的静态变量
- 类和静态变量
- 不同作用域中的静态变量和全局变量
- 静态变量声明和定义
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 在类中继承静态变量?
- "local scope"中的 C++ 初始化静态变量
- 使用静态变量的递归调用的不同输出
- 静态 constexpr 类成员变量对多线程读取是否安全?
- C++:是否可以使用非静态成员变量模板?
- 复制文件流C++静态变量
- 如何在复杂继承中访问静态成员变量
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- 跨模板化函数编译的静态变量
- constexpr函数中的静态constexpr变量
- 静态成员变量不会由 gettext 转换
- 从 exe 和 dll 访问静态库中的 extern 变量
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 用于定义公共变量静态常量整数的C++标准