gpt4 book ai didi

java - 初始化非静态成员 : C++ and Java comparison

转载 作者:行者123 更新时间:2023-11-30 04:20:56 26 4
gpt4 key购买 nike

<分区>

我来自 C++ 背景并正在学习 Java。

在 C++ 中,我们不能在类定义中初始化非静态成员,如下所示:

#include <iostream>


using namespace std;

class myClass{
int i=10;//Error

public:
void set_i()
{
i=10;
}
void get_i()
{
cout << i << endl;
}
};


int main()
{

myClass ob;
ob.set_i();
ob.get_i();


return 0;
}

抛出编译错误:

$ g++ -Wall Test.cpp -o Test
Test.cpp:8: error: ISO C++ forbids initialization of member `i'
Test.cpp:8: error: making `i' static
Test.cpp:8: error: ISO C++ forbids in-class initialization of non-const static member `i'

但在 Java 中是允许的:

class Test{

private int i=10; //No Error

public static void main(String[] args)
{

Test t= new Test();
System.out.println(t.i);
}
}

在JAVA中编译运行成功。

有人能告诉我造成这种差异的原因吗?

谢谢

@那些将此问题标记为无用的人。这是一个有效的问题:

基于以下引用资料: http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fcplr038.htm

“一旦定义了静态数据成员,即使静态数据成员类的对象不存在,它也会存在。”

这意味着:C++ 不允许这样做,因为除非首先创建该类的对象,否则不会为该数据变量创建实例。如果 java 不是这种情况,则意味着数据成员的实例确实存在,即使尚未创建该类的对象也是如此。

而且 Java 也以 C++ 为基础,因此必须有一些具体的原因来区分这两种语言。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com