我被困在以下代码中的构造函数和析构函数,我不理解结果。值的一个应该是7,怎么会有四个数字?帮助赞赏。
class Package
{
private:
int value;
public:
Package()
{
value=7;
cout<<value<<endl;
}
Package(int v)
{
value=v;
cout<<value<<endl;
}
~Package()
{
cout<<value<<endl;
}
};
int main()
{
Package obj1(4);
Package obj2();
Package obj3(2);
return 0;
}
在控制台提示符中显示
4
2
2
4
答案 0 :(得分:4)
本声明
Package obj2();
是一个没有参数且返回类型为Package的函数声明。
您可以改为编写
Package obj2 {};
如果你想要它是一个对象定义。
所以你只定义了两个对象
Package obj1(4);
Package obj3(2);
相应地,构造函数打印
4
2
析构函数以相对于被调用构造函数(LIFO - 最后输入第一个输出)的相反顺序调用并输出
2
4
答案 1 :(得分:2)
答案 2 :(得分:2)
Package obj2();
此行被解析为“声明一个名为obj2
的函数,它返回一个Package
对象,而不是”声明一个名为obj2
的类型为Package
的变量并构造没有争论。“这称为most vexing parse。
修复任何C ++:
Package obj2;
使用C ++ 11语法进行更明确的修复:
Package obj2{};