1

他の投稿からコードを読んで、私はこのようなものを見ています。

struct Foo {
  Foo() : mem(0) {}
  int mem;
};

この場合、特に中括弧に関して、mem(0){}は何をしますか?私はこれまでこれを見たことがなく、これについて他にどこで見つけることができるかわかりません。mem(0)がmemを0に初期化することは知っていますが、なぜ{}なのですか?

ありがとう。

4

3 に答える 3

7

はクラスのコンストラクターであるためFoo()、メンバー変数memがクラスの外部で初期化されている場合でも、本体が必要です。

そのため、あなたの例では、コンストラクターの本体は空です。

Foo() : mem(0)
{
    // 'mem' is already initialized, but a body is still required.
}
于 2012-01-17T10:00:52.167 に答える
2

クラスのコンストラクターを定義します。コロンの後の部分は初期化リストでありmem、コンストラクター呼び出しを使用してメンバーがゼロに初期化されます。

比較:

int a(0);
int b = 0;

これら2つは同じことをしますが、前者はオブジェクト構築がC++で通常どのように見えるかとより一致しています。

于 2012-01-17T10:00:14.303 に答える
0

intc++メソッドの実装は.hファイルで定義できます

class MyClass
{
  public:
   MyClass(){
     .....
   }

   void doSomething(){
     .....
   }

   ~MyClass(){
     .....
   }
};

通常、テンプレートの実装で使用されます。また、ライブラリのリンクを避けたい場合や、libファイルをプロジェクトにリンクせずにファイルを含めることができるようにすべてのコードをユーザーに提供したい場合は、このクラス宣言のメソッドを使用できます。

于 2012-01-17T10:05:52.223 に答える