5

Complex a;の違いを説明できる人はいますか。複雑なb(); ?

#include<iostream>

class Complex
{
public:

    Complex()
    {
        std::cout << "Complex Constructor 1" << std::endl;
    }

    Complex(float re, float im)
    {
        std::cout << "Complex Constructor 2" << std::endl;
    }

    ~Complex()
    {
        std::cout << "Complex Destructor" << std::endl;
    }    
};

int main()
{
    Complex a;
    std::cout << "--------------------------" << std::endl;
    Complex b();
    std::cout << "--------------------------" << std::endl;
    Complex c(0,0);
    std::cout << "--------------------------" << std::endl;

    return 0;
}

出力:

Complex Constructor 1
--------------------------
--------------------------
Complex Constructor 2
--------------------------
Complex Destructor
Complex Destructor

ご覧のとおり、複雑な a; デフォルトのコンストラクタであるComplex b();を呼び出します。しませんし、複雑な c(0,0); オーバーロードされたコンストラクターを呼び出します。

ここで何が起こっているのですか?複雑な b();と思いました。スタック変数を作成し、それを初期化するためにデフォルトのコンストラクターを呼び出しますか?

4

2 に答える 2

8

Complex b();関数宣言です。Complexこれは、引数を取らず、オブジェクトを返す関数です。

これは非常によくある間違いであり、独自の名前があります。最も厄介な解析

C++11 は、統一された初期化構文を導入することで、この問題を解決しました。

Complex b{};
于 2012-11-11T22:47:55.993 に答える
4

Complex b();引数を持たず、 を返す関数を宣言しますComplex

于 2012-11-11T22:47:58.940 に答える