可能重复:
带空括号的默认构造函数
这是我工作的代码,我不明白它在构造函数Package obj2()上发生了什么; 输出时仅显示值4(包obj1(4))和2(包obj3(2))
#include <iostream>
using namespace std;
class Package
{
private:
int value;
public:
Package()
{
cout<<"constructor #1"<<endl;
value = 7; cout << value << endl;
}
Package(int v)
{
cout<<"constructor #2"<<endl;
value = v; cout << value << endl;
}
~Package()
{
cout<<"destructor"<<endl;
cout << value << endl;
}
};
int main()
{
Package obj1(4);
Package obj2();
Package obj3(2);
}
Run Code Online (Sandbox Code Playgroud)
这不会声明一个对象:
Package obj2();
Run Code Online (Sandbox Code Playgroud)
信不信由你,它声明了一个返回一个Package对象的函数.它被称为" 最令人烦恼的解析".
线
Package obj2();
Run Code Online (Sandbox Code Playgroud)
需要是
Package obj2;
Run Code Online (Sandbox Code Playgroud)
更多信息
http://www.parashift.com/c++-faq/empty-parens-in-object-decl.html
或者,对此的另一种看法(来自谷歌缓存,真实网站已关闭,并持保留态度,它提出了好的观点,但尽最大努力让它们听起来比实际情况更糟):