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

标签 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

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

最佳答案

在 C++ 中,这不是一个非常常用的模式。通常数据会存储在对象中,而不是作为函数的静态。但是,像这样在函数中声明的静态变量保证(包括线程安全)只创建一次。这对很多事情都有用。例如,如果您考虑一下,您创建的代码会创建一个整数单例:即此函数创建并返回对一个整数的引用,该引用始终是同一个整数。无论该函数被调用多少次或在多少个线程中都是如此。只有一个整数 j 的拷贝将永远存在。您可以阅读更多关于单例模式的信息,只需 Google 一下,它是众所周知的。另一个用途是确保某些函数仅使用保护变量调用一次:

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

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

关于c++ - 模式名称,将值存储为函数中的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26490106/

相关文章:

C++ Const 成员函数(初级)

c++ - std::ifstream::read() 读取少于请求并无明显原因设置 failbit

java - 使用异常处理初始化接口(interface)中的静态字段

c++ - 什么是静态或常量抛出错误?

c++ - binary64 的 15-17 位有效小数位?

c++ - 在编译时为 C++ 中的成员函数添加别名

c++ - 模板运算符重载中的类型冲突

java - 从数组实例调用 get(数组静态方法)

c++ - 断点未命中静态链接库中的全局静态初始化类

c++ - C++ 中的静态构造函数和 fatal error LNK1120 : 1 unresolved externals