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

Pattern name, storing values as static variables in a function

本文关键字:变量 静态 存储 函数 模式      更新时间:2023-10-16

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

#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只被调用一次,这通常很有用。