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

mit*_*esh 20 c++ constructor class most-vexing-parse

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

#include<iostream>
using namespace std;

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

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

int main()
{    
    Class object();
}
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*shD 33

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

试试看.

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


Pra*_*rav 17

没有调用构造函数

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

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

尝试 Class object;

编辑:

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

不过google for C++最令人烦恼的解析.