簡體   English   中英

默認構造函數遞歸崩潰

[英]Default Constructor Recursion Crash

/ *以下程序似乎神秘地輸入遞歸,即使看不到任何東西。 編譯器:g ++(Ubuntu 4.4.3-4ubuntu5.1)4.4.3機器:x86操作系統: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;
}

為什么是這樣?

Test (x);

被解析為

Test x;

......不是構造函數調用。 你也可以寫

Test (y);

並獲得相同的行為。

你不能在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的答案 ,以解釋代碼崩潰的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM