据我所知,类的每个实例在内存中都有自己的成员变量,因此它可以为不同的对象存储不同的值。但是,成员函数不一样。成员函数在类的对象之间重用,因此它只有一个地址和一个内存块,以便在需要时引用所有对象。
静态函数用于访问静态成员。但是,静态函数在其应用程序的生命周期中也只存在一个。除了作为静态访问器之外,在低级别它与普通的类功能没有区别,不是吗?或许我错了,每个班级都有自己的功能?
答案 0 :(得分:6)
非静态函数接受附加参数this
,它是指向具有特定于实例的变量的类实例的指针。
静态函数没有此参数(因此您不能在静态函数中使用this
并且只能访问静态数据成员。)
答案 1 :(得分:2)
这在语言与语言之间有所不同,但在C或C ++ 03中,函数通常映射在汇编函数上;它们在内存中存在一次(无论是自由函数,类函数还是类静态函数),并将参数作为参数,包括隐式成员函数的this
指针。
在C ++ 11中,lambda函数引入了一个新颖性:所谓的函数的每个实例都会带有一些状态。从实现的角度来看,它意味着需要创建“常规”功能,并且它与匿名数据包相关联(如果需要)。每次创建lambda时都不需要复制该函数,但数据会这样做。一个有用的数字是要记住lambdas(在C ++中)替换函数对象(或谓词对象):它们只是语法糖,实现类似。
答案 2 :(得分:0)
static和member函数之间的唯一区别是成员函数总是自动传入this
指针。
答案 3 :(得分:0)
简单地说,如果它被引用,静态函数为自己创建一组内存,并且用于通常不可更改的静态数据成员。但是,非静态函数为每个实例创建单独的内存集,并且适用于非静态和静态数据成员。如果你需要稳定的输出去静态,如果你需要替代去非静态。