隐藏的默认构造函数

时间:2014-06-05 08:41:41

标签: c++

为什么下面的代码会编译?

class Test
{
    public:
        Test(int i) {}
    private:
        Test();
};

int main()
{
    // OK - uses Test(int i)
    Test test(5);

    // Error - Test() is private
    // Test test2;

   // Why does this compile? Test() is private!
   Test test3();
}

我认为最后的instanciation将无法编译,因为no-param构造函数是私有的?

1 个答案:

答案 0 :(得分:2)

Test test3();是一个函数声明。它声明了一个名为test3的{​​{1}}类型的函数。用C ++声明事物是可以的,即使它们从未被定义过(因为你没有试图实际调用它)。