构造函数问题

时间:2012-11-06 17:23:17

标签: c++

  

可能重复:
  Default constructor with empty brackets

这是我工作的代码,我不明白它在构造函数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);

}

3 个答案:

答案 0 :(得分:8)

这不会声明一个对象:

Package obj2();

信不信由你,它声明了一个返回Package对象的函数。它被称为“most vexing parse。”

答案 1 :(得分: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

答案 2 :(得分:4)

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

Package obj2();

Package obj2{};

这是C ++ 11的uniform initialization syntax的一部分,它主要是为解决这个问题而设计的。