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

这段代码并不像我期望的那样。

#include<iostream> using namespace std; class Class { Class() { cout<<"default constructor called"; } ~Class() { cout<<"destrutor called"; } }; int main() { Class object(); } 

我期望输出的默认构造函数叫',但我没有看到任何东西作为输出。 问题是什么?

不。 你的line Class object(); 宣布了一个功能。 你想要写的是Class object;

试试看。

你也可能对最令人头疼的解析感兴趣(正如其他人所指出的那样)。 一个很好的例子是在第33页的Effective STL Item 6中。(在2009年9月的第12期)特别是第35页顶部的示例是您所做的,它解释了解析器为什么将其作为函数声明处理。

没有调用构造函数

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

Class object(); 被解释为一个没有参数的函数object的声明,并返回一个Class [按值]

尝试Class object;

编辑

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

但谷歌C ++最令人烦恼的解析。

你可以像这样使用它:

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