C/C++中的static
这个关键词几乎是所有面C/C++相关的技术时会被问到的。总结一下:
首先在C里面
/* ----- test.c --- */
static int status;
static int sort( int * p, int length)
{
}
int change_status()
{
static int s = 0;
}
int status 是一个local global variable, 意思是在文件test.c里面它是全局的,但是在其它文件里不可见。问题来了,如果其它源文件也定义一个static int status呢?完全没有关系在这里,因为互相不可见。一个常见问题,static变量存在哪里?答案是data segment. 再也是一个常见问题,啥时候初始化? compiling.
这个local global特性也可以作用在函数上,例如上面的sort(),就是一个当前源文件可见的函数,其他源文件大可以自行定义自己的sort(),当然,也要用static,否则就是全局可见。注意static作用的是函数而非返回值。
// test.cpp
class A
{
static int status;
static int get_status();
}
int A::status = 0; //初始化必须在类定义外进行,这个有点weird,但标准就是这样定的
在C++里面,类里面的static变量是global而非local global了。成员函数被冠以static时的特殊之处在于函数里面只能访问当前类的static变量。道理很简单,static函数可以没有instance被使用,例如A::get_status(),如果让它访问动态成员只能得到非法指针。
关于初始化,如果不写那一句初始化(或者说我们不想初始化)如何?编译会通过,但是link会有问题。
--最后一个killer问题,最好在问过structure和class有什么区别之后问,structure里可以有static变量么?相信绝大多数用了不少年C/C++的人也没有想过这个。当你面试别人而且不厚道的话可以问这个。
分类
Software评论(1)
发表评论

seems so complex for the new soul to understand these programming lauguages:) BTW,got ur blog link from douban.
Ur comments are fabulous:)