21

这段代码的行为与我期望的不同。

#include<iostream>
using namespace std;

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

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

int main()
{    
    Class object();
}

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

4

3 回答 3

34

没有。你的行Class object();声明了一个函数。你想写的是Class object;

试试看。

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

于 2010-09-28T07:33:51.700 回答
18

不调用构造函数

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

Class object();被解释为object不带参数并返回Class[by value]对象的函数声明

尝试Class object;

编辑

正如 Mike 注意到的,这与您提供给编译器的代码并不完全相同。是构造函数/析构函数public还是Class结构?

然而,谷歌对于 C++ 的解析最为棘手。

于 2010-09-28T07:32:26.820 回答
1

你可以像这样使用它:

Class obj;
//or
Class *obj = new Class(/*constructor arguments*/);
于 2010-09-28T08:53:00.800 回答