为什么静态函数只能访问静态的数据成员?

来源:百度知道 编辑:UC知道 时间:2024/05/17 08:39:06

我是JAVA程序员,我就从JAVA方面说吧.
这与静态数据的存放位置和绑定机制有关,JAVA是动态绑定的,只有到运行的时候才真正知道要去找哪个成员的实现,
而把数据成员声明成静态的则是实现"静态绑定"的一种方法,这就是为什么声明成静态的可以提高速度的原因了.
因为静态函数也归署于静态绑定(事先就知道我要用的变量在哪),所以他只能访问静态变量!

没有这种说法,静态函数也可以访问其它非静态变量.例如:

int a;
static int B()
{
return a;
}

在编译时绝不会出错.

但是要注意的是,如果某个类的成员函数被定义为静态函数,那么它就只能访问该类的静态成员变量了.因为静态只对上下文相关的范围起作用.对于使用外部数据,就必须加extern声明.

静态数据成员别的函数也可以访问的.
只是在赋初值的时候要在类外进行;此外,和别的数据成员没什么区别了.
class A
{
static int a;
};
A::a=0;//在类之外赋初值.