[关闭]
@CrazyHenry 2018-02-26T17:09:01.000000Z 字数 670 阅读 1341

0.x 7.C++类的静态成员

ccccC++Primer


  1. static成员不属于任何类对象,所以即使给此函数加上virutal也是没有任何意义的。
  2. 静态与非静态成员函数之间有一个主要的区别:那就是静态成员函数没有this指针。

类作用域是个非常复杂的概念,在类的作用域中,可以访问到其静态函数,不论是哪个文件里。这一点与C语言里的静态函数不一样。因为即使你在string.cpp里定义的静态函数,在main.cpp里只要include了string.h就可以通过string::staticfunc()来调用静态函数。因为类作用域可以跨越文件。

但是全局作用域被划分了几个层次,一个是static全局作用域,在本源文件才可以访问。而非静态全局作用域,就可以跨文件访问。

类对象本身存了类作用域的地址(但是不占对象所占内存),因此通过对象可以访问到类作用域,包括类作用域里的普通成员函数以及静态成员函数。

C++引入了访问限制符,就把这个问题变得更复杂了!

同样的,类作用域里的静态函数也存在固定的静态区,因此调用时不需要建立堆栈框架。但是调用普通的成员函数时,仍需要在每个调用点建立堆栈框架,比如为函数内需要使用的局部变量分配栈区,完成函数调用。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注