这是我工作的代码,我不明白它在构造函数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);
}
答案 0 :(得分:8)
答案 1 :(得分:4)
行
Package obj2();
需要
Package obj2;
更多信息
http://www.parashift.com/c++-faq/empty-parens-in-object-decl.html
或者,另一种选择(来自谷歌缓存,真实网站已经关闭,并且带着一点点盐,它提出了好点但是尽力使它们听起来比它们更糟糕):
答案 2 :(得分:4)
如果您正在使用C ++ 11,并想要解决“最棘手的解析”问题,可以替换
Package obj2();
与
Package obj2{};
这是C ++ 11的uniform initialization syntax的一部分,它主要是为解决这个问题而设计的。