动态分配的静态变量
static variable dynamically allocated
函数中的静态变量在程序的生命周期内只分配一次。
因此,如果我有一个这样的函数:
void f(int n) {
static int *a = new int[n];
}
我先打电话
f(1)
然后
f(3)
第二次调用后数组 A 会有多大?
函数
本地static
变量在控件第一次通过它们时初始化。标准中的相关部分是 6.7 [stmt.dcl]。也就是说,数组将获取大小 1 并保持此大小,除非您显式更改其大小。
C++ 2011 的优点是初始化 static
变量也是线程安全的:如果在初始化变量时另一个线程到达实例,则第二个线程将被阻塞,直到初始化完成。
当
控制流首次到达声明时,将初始化static
局部变量。在这种情况下,由于您第一次使用 1
作为 n
参数,您将为一个int
分配大小。
做这种事情是个坏主意。您应该只使用本地、非静态、std::vector
或其他更高级别的容器。
函数内静态变量的初始化仅在函数内静态语句的第一次计算期间发生。 第一次使用 f(1)
调用 f
时,将进行 a
的初始化,它将指向单个 int 的数组。 调用 f(3)
时,a
已被初始化,因此右侧:
static int *a = new int[n];
将不会再次评估,a
将继续指向最初分配的大小为 1 的数组。
数组
的大小为 1,因为变量 'a' 的初始化只执行一次,第一次调用函数 'f' 时。
相关文章:
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 模板基类中的静态变量
- 类和静态变量
- 不同作用域中的静态变量和全局变量
- 静态变量声明和定义
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 在类中继承静态变量?
- "local scope"中的 C++ 初始化静态变量
- 使用静态变量的递归调用的不同输出
- 静态 constexpr 类成员变量对多线程读取是否安全?
- C++:是否可以使用非静态成员变量模板?
- 复制文件流C++静态变量
- 如何在复杂继承中访问静态成员变量
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- 跨模板化函数编译的静态变量
- constexpr函数中的静态constexpr变量
- 静态成员变量不会由 gettext 转换
- 从 exe 和 dll 访问静态库中的 extern 变量
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 用于定义公共变量静态常量整数的C++标准