6

可能重复:
带空括号的默认构造函数

这是我处理的代码,我不明白它在构造函数 Package obj2() 上发生了什么;输出时仅显示值 4 (Package obj1(4)) 和 2 (Package 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);

}
4

3 回答 3

8

这不声明一个对象:

Package obj2();

信不信由你,它声明了一个返回Package对象的函数。它被称为“最令人头疼的解析”。

于 2012-11-06T17:25:49.097 回答
4

线

Package obj2();

需要是

Package obj2;

更多信息

http://www.parashift.com/c++-faq/empty-parens-in-object-decl.html

或者,替代方案(来自谷歌缓存,真实站点已关闭,并对其持保留态度,它会提高优点,但会尽力使它们听起来比实际更糟):

http://webcache.googleusercontent.com/search?q=cache:http://yosefk.com/c%2B%2Bfqa/ctors.html#fqa-10.2

于 2012-11-06T17:28:14.177 回答
4

如果您使用的是 C++11,并且想要解决“最棘手的解析”问题,您可以替换

Package obj2();

Package obj2{};

这是C++11统一初始化语法的一部分,主要是为了解决这个问题而设计的。

于 2012-11-06T17:30:00.347 回答