私はいくつかの C++ を Java に移植しており、次の省略形に遭遇しました..しかし、これが何を意味するのか、またはそれをグーグルで検索する方法さえわかりません:
class mailbox {
public:
mailbox(): sent(0),received(0),msg(0) { }
メソッドがメールボックス() の後に(?) を呼び出す意味がわかりません。
ありがとう。
これはメンバーの初期化構文です。コンストラクターの本体が始まる前に、データ メンバーを指定された値に初期化します。
非静的定数データ メンバーを初期化する C++11 より前の唯一の方法であり、コンストラクターの本体で初期化するよりも高速です。
みたいな
mailbox() {
sent = 0;
received = 0;
msg = 0;
}
高速であることを除いて、const メンバーでも実行できます。実際、データ メンバーのチェックを実行する機能は提供されていませんが、それでも利用できます。
mailbox (Foo sent, Bar received, Foobar msg) : sent (0), received (0), msg (0) { //default values
if (!setSent (sent))
cout << "Error setting sent; sent is 0 instead."; //since we initialized it to 0 before
//likewise for other members...
}
sent、received、および msg が int であると仮定すると、次のようになります。
mailbox() {
sent = 0;
received = 0;
msg = 0;
}
この構文が存在するのは、すべてのオブジェクトがポインターである Java とは異なり、C++ では、型がデフォルトのコンストラクターを持たないメンバー変数を持つことができるためです。例えば:
class Foo {
public:
Foo(int x);
};
class Bar {
public:
Bar(int x) { // ERROR, Foo does not have a default constructor
foo = Foo(x);
}
Bar() : Foo(0) {} // OK, using Foo(int) instead of Foo()
private:
Foo foo;
};
この例では、Foo にデフォルトのコンストラクターがあったとしても、Bar(int) は Foo を 2 回構築することに注意してください。