为什么没有调用构造函数?

时间:2010-09-28 07:30:19

标签: c++ class constructor most-vexing-parse

此代码的行为与我的预期不符。

#include<iostream>
using namespace std;

class Class
{
    Class()
    {
        cout<<"default constructor called";
    }

    ~Class()
    {
        cout<<"destrutor called";
    }
};

int main()
{    
    Class object();
}

我期望输出'默认构造函数',但我没有看到任何输出。有什么问题?

3 个答案:

答案 0 :(得分:33)

不。你的行Class object();声明了一个函数。你要写的是Class object;

尝试一下。

您可能也对最令人烦恼的解析感兴趣(正如其他人所说)。一个很好的例子是在第33页的Effective STL第6项中。(在第12次打印中,2009年9月。)具体来说,第35页顶部的示例是您所做的,它解释了为什么解析器将其作为函数处理声明。

答案 1 :(得分:17)

  

无需调用构造函数

因为实际上永远不会调用构造函数。

Class object();被解释为函数object的声明,它不接受任何参数并返回Class的对象[按值]

尝试Class object;

修改

正如迈克注意到的那样,这与您为编译器提供的代码并不完全相同。构造函数/析构函数publicClass是结构吗?

然而google for C ++最令人烦恼的解析。

答案 2 :(得分:0)

你可以像这样使用它:

Class obj;
//or
Class *obj = new Class(/*constructor arguments*/);