【问题标题】:Constructor issue [duplicate]构造函数问题[重复]
【发布时间】:2012-10-26 16:59:18
【问题描述】:

可能重复:
Default constructor with empty brackets

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

}

【问题讨论】:

    标签: c++


    【解决方案1】:

    这并不声明一个对象:

    Package obj2();
    

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

    【讨论】:

      【解决方案2】:

      线

      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

      【讨论】:

      • 我给出了原因,你给出了解决方案!
      • 调用默认构造函数时不需要()
      • @EmmanuelN 这不仅仅是“不需要”,而是“不得使用”。
      • 那么他是如何初始化构造函数参数的呢?
      • @David 默认构造函数调用,根据定义,没有任何参数(默认构造函数可以接受参数,只要所有参数都有默认值)。
      【解决方案3】:

      如果你用的是C++11,想解决“最头疼的解析”问题,可以替换

      Package obj2();
      

      Package obj2{};
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-05
        • 2011-05-29
        • 1970-01-01
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多