内存中静态方法和非静态函数的区别

Amu*_*umu 5 c++ class static-members

据我所知,类的每个实例在内存中都有自己的成员变量,因此它可以为不同的对象存储不同的值.但是,成员函数不一样.成员函数在类的对象之间重用,因此它只有一个地址和一个内存块,以便在所有对象需要时引用.

静态函数用于访问静态成员.但是,静态函数在其应用程序的生命周期中也只存在一个.除了作为静态访问器之外,在低级别它与普通的类功能没有区别,不是吗?或许我错了,每个班级都有自己的功能?

lit*_*adv 6

非静态函数接受附加参数,this该参数是指向具有特定于实例的变量的类实例的指针.

静态函数没有此参数(因此您不能this在静态函数中使用并且只能访问静态数据成员).


Mat*_* M. 2

这因语言而异,但在 C 或 C++03 中,函数通常映射到汇编函数;也就是说,它们在内存中存在一次(无论是自由函数、类函数还是类静态函数),并接受参数作为参数,包括this隐式成员函数的指针。

在 C++11 中,lambda 函数引入了一个新奇之处:所谓函数的每个实例都将携带一些状态。从实现的角度来看,这意味着需要创建一个“常规”函数,并将其与匿名数据包相关联(如果需要)。每次创建 lambda 时,不需要复制函数,但数据需要复制。一个有用的数字是记住 lambda(在 C++ 中)取代了函数对象(或谓词对象):它们只是语法糖,实现是相似的。