无法在这里理解静态概念的工作
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中,没有自由函数,也没有静态存储持续时间的局部变量。
我有 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中,没有自由函数,也没有静态存储持续时间的局部变量。