2

/* 次のプログラムは、何も見えないのに不思議なことに再帰に入っているようです。コンパイラ: g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3 マシン: x86 OS: Ubuntu 10.04 64 ビット

*/

    #include<iostream>
    using namespace std;

    class Test
    {
    public:
      Test ():x(9)
      {
        cout << " Test::Test\n";
        Test (x);
      }
      Test (int a)
      {
        cout << " Test::para\n";
      }
    private:
            int x;
    };


int main(void)
{
 Test a;
return 0;
}

どうしてこれなの?

4

2 に答える 2

9
Test (x);

として解析されます

Test x;

...コンストラクター呼び出しとしてではありません。書くこともできます

Test (y);

同じ動作を取得します。

于 2012-05-30T10:24:24.263 に答える
2

C++ では、そのような他のコンストラクターを呼び出すことはできません。しかし、C++11 以降では、初期化子リストでコンストラクター呼び出しを転送できます。

class Test {
public:
    Test (): Test(9) {
        cout << " Test::Test\n";
    }

    Test (int a) : x(a) {
        cout << " Test::para\n";
    }

private:
    int x;
};

コードがクラッシュする理由の説明については、Wolfgang の回答を参照してください。

于 2012-05-30T09:42:39.773 に答える