方法调用中的静态变量
static variable in method call
如果在方法内部创建一个局部静态变量,是每个实例初始化一次,还是每个程序初始化一次?
这在C++和Objective-C之间有区别吗?
如果你在一个方法中创建了一个局部静态变量,是每个实例初始化一次,还是每个程序初始化一次?
每个程序一次。
即使它在非静态类成员函数中,它也不与任何类实例关联;在整个程序中只有一个变量实例,只初始化一次。
这在C++和Objective-C之间有区别吗?
在C++中,它是在第一次调用函数时初始化的。在C(和Objective-C)中,它是在程序启动之前初始化的。在实践中,这没有什么区别,因为初始化在C.中不会有任何副作用
Objective-C在这方面与C没有什么不同,因此方法中的局部静态变量在程序生命周期中只初始化一次。
还可以看看S.O.的这篇文章,它可能有助于如何在Obj-C中使用静态变量。
每个程序初始化一次。
从ObjC++到ObjC方法,它没有变化。
如果是C,它可能会有所不同——例如,如果函数是静态内联函数,则C函数可以复制静态数据。因此,您最终可能会得到冗余的静态变量。
使用C++,每个程序只需要一次。在一个方法或导出的C函数中,每个程序一次。
在C++中,每个程序最多初始化一次;当该方法第一次被执行时,初始化发生。(特别是在执行声明时。)
您根本没有方法的实例(至少不能创建更多实例)。
奇怪的是,模块链接器,每个方法都有一个副本,任何静态变量都有一份副本。
相关文章:
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 模板基类中的静态变量
- 类和静态变量
- 不同作用域中的静态变量和全局变量
- 静态变量声明和定义
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 在类中继承静态变量?
- "local scope"中的 C++ 初始化静态变量
- 使用静态变量的递归调用的不同输出
- 复制文件流C++静态变量
- 跨模板化函数编译的静态变量
- C++编译器是否优化了顺序静态变量读取?
- C++,每个循环初始化一个新的静态变量
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 这些语句是否等效(静态变量、常量变量和泛型)
- 程序如何知道静态变量是否需要初始化?
- 类外的静态变量实例化
- 无法解析静态变量
- 函数局部静态变量:从性能角度来看的优点/缺点
- 访问从 CPP 文件到其他头文件的静态变量