方法调用中的静态变量

时间:2012-01-20 15:25:10

标签: c++ objective-c

如果在方法中创建局部静态变量,是每个实例初始化一次,还是每个程序初始化一次?

这在C ++和Objective-C之间有区别吗?

6 个答案:

答案 0 :(得分:6)

请注意,在C ++中,如果您的类或方法是“模板化”的,那么将为每个模板实例化创建一个自己的静态变量。例如。使用三种不同的模板参数类型会产生三种不同的静态变量。

答案 1 :(得分:6)

  

如果在方法中创建局部静态变量,是每个实例初始化一次,还是每个程序初始化一次?

每个节目一次。

即使它在非静态类成员函数中,它也不与任何类实例相关联;在整个程序中只有一个变量实例,只初始化一次。

  

这在C ++和Objective-C之间有区别吗?

在C ++中,它是在第一次调用函数时初始化的。在C(和Objective-C)中,它在程序启动之前初始化。在实践中,这没有什么区别,因为初始化不能在C中产生任何副作用。

答案 2 :(得分:3)

在这方面,Objective-C与C没有区别,因此方法中的局部静态变量在程序生命周期中只被初始化一次。

还要看看this S.O. post,它可能有助于你如何在Obj-C中使用静态变量。

答案 3 :(得分:1)

每个程序初始化一次。

从ObjC ++到ObjC方法没有变化。

如果它是C,则可能会有所不同 - 如果(例如)函数是静态内联函数,则C函数可以复制静态数据。因此,您最终可能会得到冗余的静态变量。

使用C ++,每个程序只需一次。在方法或导出的C函数中,每个程序只需一次。

答案 4 :(得分:0)

在C ++中,每个程序最多初始化一次;首次执行该方法时会发生初始化。 (特别是在执行声明时。)

答案 5 :(得分:0)

您根本没有实例的方法(至少在您可以创建更多方法的意义上)。

Modulo链接器很奇怪,每个方法都有一个副本,每个静态变量都有一个副本。