我有一个问题:假设我们有这个功能:(在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 = 0在h终止后丢失.对?我不确定我真的得到了它!
那Java呢?我读过我不能static在方法中声明变量,只能在类中声明变量.
谢谢.
Rei*_*ica 17
在C++中,static是该语言最重载的关键字之一.你在这里使用的意思是这样的:
在具有说明static符的函数内定义的变量具有静态存储持续时间 - 它占用程序的整个运行时的相同空间,并在对函数的不同调用之间保持其值.因此,您可以安全地返回对它的引用,因为变量总是在那里支持引用.
static当函数调用返回时,正常(非)函数局部变量被销毁,因此引用变为悬空 - 它不引用任何有效的东西.使用它会导致未定义的行为.
Java根本没有函数范围static变量(它没有关键字的含义static).这就是为什么你不能在那里宣布它.
C++和Java都具有static关键字的"类范围"含义.当使用static关键字声明类的成员时,意味着该成员不绑定到该类的任何实例,而只是一个全局变量,其标识符位于类的范围内.
| 归档时间: |
|
| 查看次数: |
6417 次 |
| 最近记录: |