私は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 ++をベースとしているため、2つの言語の間にこの違いをもたらす具体的な理由が必要です。