我有个问题:
假设我们有这个功能:(在C中)
假设我们有这个功能:(在C中)
int& f() { static int x = 0; return x; } // OK
和
int& h() { int x=0; return x; } // ERROR
为什么h会出错?是因为关键字static吗?我发现静态关键字让我的x变量在我的函数终止后生效.所以我仍然可以从外部访问该内存位置(另一个功能或主要?对吗?).而是在h终止后丢失int x = 0.对?我不确定我真的得到了它!
那Java呢?我读过我不能在方法中声明静态变量,只能在类中声明.
谢谢.
解决方法
在C中,static是该语言最重载的关键字之一.你在这里使用的意思是这样的:
在具有静态说明符的函数内定义的变量具有静态存储持续时间 – 它占用程序的整个运行时的相同空间,并在对函数的不同调用之间保持其值.因此,您可以安全地返回对它的引用,因为变量总是在那里支持引用.
当函数调用返回时,正常(非静态)函数局部变量被销毁,因此引用变为悬空 – 它不引用任何有效的东西.使用它会导致未定义的行为.
Java根本没有函数范围的静态变量(它没有关键字static的含义).这就是为什么你不能在那里宣布它.
C和Java都具有static关键字的“类范围”含义.当使用static关键字声明类的成员时,这意味着该成员不绑定到该类的任何实例,而只是一个全局变量,其标识符位于类的范围内.