2

/*下面的程序似乎神秘地进入了递归,即使看不到任何东西。编译器:g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3 机器:x86 操作系统:Ubuntu 10.04 64-bit

*/

    #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 回答