无法在这里理解静态概念的工作

not able to understand the working of static concept here in

我有 java 代码:

public class Test1
{
 public static void main(String args[])
 {
    t();t();t();
 }
 public static void t()
 {
   int i=0;
   i++;
   System.out.println(i);
 }
}

这给出了输出:

1 
1 
1

我无法与此 C++ 代码匹配:

  #include<iostream>
  using namespace std;
  int static t();
  int main()
  {
   t();
   t();
   t();
  }
  int  static t()
  {
   int i = 0;
   i++;
   cout<<i;
  }

这也给出了

1
1
1

我认为(在 Java 的情况下)一个静态 main 有一个静态方法 t() 与之关联。

但是如您所见,在 C++ 中 main 不是静态的,所以我对 C++ 代码如何给出与 Java 相同的输出感到有点困惑,即使没有静态主。这不会影响它的工作方式吗?

或者更精确的问题是:static 在这里(在两种代码中)如何工作?相对比较对我来说就足够了。

Java 和 CPP 的入口点要求不同。 Java 要求 main static 作为入口点。

不要以这种方式比较语言

此外,i 的值将始终是 1,因为它是一个方法 local 变量。使 i 静态会给你不同的结果。

在Java中,静态方法与class相关联,可以在没有实例的情况下调用。因此也无法访问实例变量。

在 c++ 中,static 关键字根据上下文有多种含义。就上述描述而言,静态成员函数(class 方法通常在 c++ 中被调用)与 Java 中的静态方法非常相似。

然而,int main()int static t() 都不是成员函数。它们是免费函数,不与任何 class 关联。声明一个自由函数静态给它内部链接。这意味着它对其他编译单元(.cpp 文件)中的函数不可见。

函数是静态的还是非静态的,绝不会影响 t() 在任何一个代码版本中的工作方式。您总是打印一个局部变量并递增它。由于该变量没有静态存储持续时间(关键字 static 的另一个用途),也不是对象实例的成员,而是一个自动局部变量,一旦函数调用结束,它就会被销毁,因此增量值永远不会用于任何事情。另一方面,如果 变量 被声明为静态的,那么你会得到输出“1 2 3”。

在Java中,没有自由函数,也没有静态存储持续时间的局部变量。