21

このコードは、期待どおりに動作しません。

#include<iostream>
using namespace std;

class Class
{
    Class()
    {
        cout<<"default constructor called";
    }

    ~Class()
    {
        cout<<"destrutor called";
    }
};

int main()
{    
    Class object();
}

「デフォルトのコンストラクターが呼び出されました」という出力が期待されていましたが、出力として何も表示されませんでした。何が問題ですか?

4

3 に答える 3

34

いいえ。あなたの行Class object();は関数を宣言しました。あなたの書きたいことは、Class object;

やってみて。

また、最も厄介な解析に興味があるかもしれません (他の人が指摘したように)。33 ページの効果的な STL項目 6 に良い例があります (2009 年 9 月の第 12 刷)。具体的には、35 ページの上部にある例はあなたが行ったことであり、パーサーがそれを関数宣言として処理する理由を説明しています。

于 2010-09-28T07:33:51.700 に答える
18

コンストラクターを呼び出さない

コンストラクターが実際に呼び出されることはないためです。

Class object();引数を取らず、 [値渡し]objectのオブジェクトを返す関数の宣言として解釈されます。Class

試すClass object;

編集

Mike が気づいたように、これはコンパイラに供給しているコードとまったく同じではありません。コンストラクタ/デストラクタですか、publicそれともClass構造体ですか?

ただし、C ++の最も厄介な解析についてはグーグル。

于 2010-09-28T07:32:26.820 に答える
1

次のように使用できます。

Class obj;
//or
Class *obj = new Class(/*constructor arguments*/);
于 2010-09-28T08:53:00.800 に答える