C++和Java中的静态变量

bog*_*bog 9 c++ java static

我有一个问题:假设我们有这个功能:(在C++中)

int& f() {
    static int x = 0;
    return x;
} // OK
Run Code Online (Sandbox Code Playgroud)

int& h() {
    int x=0;
    return x;
} // ERROR
Run Code Online (Sandbox Code Playgroud)

为什么会h出错?是因为关键字static吗?在我的函数终止后,我发现static关键字让我的x变量生效.所以我仍然可以从外部访问该内存位置(另一个功能或主要?对吗?).相反,int x = 0h终止后丢失.对?我不确定我真的得到了它!

那Java呢?我读过我不能static在方法中声明变量,只能在类中声明变量.

谢谢.

Rei*_*ica 17

在C++中,static是该语言最重载的关键字之一.你在这里使用的意思是这样的:

在具有说明static符的函数内定义的变量具有静态存储持续时间 - 它占用程序的整个运行时的相同空间,并在对函数的不同调用之间保持其值.因此,您可以安全地返回对它的引用,因为变量总是在那里支持引用.

static当函数调用返回时,正常(非)函数局部变量被销毁,因此引用变为悬空 - 它不引用任何有效的东西.使用它会导致未定义的行为.

Java根本没有函数范围static变量(它没有关键字的含义static).这就是为什么你不能在那里宣布它.

C++和Java都具有static关键字的"类范围"含义.当使用static关键字声明类的成员时,意味着该成员不绑定到该类的任何实例,而只是一个全局变量,其标识符位于类的范围内.