6

重複の可能性:
括弧が空であるデフォルトのコンストラクター

これは私が取り組んだコードであり、コンストラクター 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);

}
4

3 に答える 3

8

これはオブジェクトを宣言しません:

Package obj2();

Package信じられないかもしれませんが、オブジェクトを返す関数を宣言しています。これは「最も厄介な解析」と呼ばれます。

于 2012-11-06T17:25:49.097 に答える
4

C++11 を使用していて、「最も厄介な解析」の問題を解決したい場合は、次のように置き換えることができます。

Package obj2();

Package obj2{};

これは、主にこの問題を回避するために設計された C++11の統一初期化構文の一部です。

于 2012-11-06T17:30:00.347 に答える
4

ライン

Package obj2();

する必要があります

Package obj2;

より詳しい情報

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

または、これを別の方法で取り上げます(Googleキャッシュから、実際のサイトはダウンしていました。塩の粒でそれを取り、それは良い点を上げますが、実際よりも悪く聞こえるように最善を尽くします):

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

于 2012-11-06T17:28:14.177 に答える