0

基本的に、次の違いは何ですか。

const Date& default_date()
{
    static Date dd(2001,Date::Jan,1);
    return dd;
}

const Date default_date()
{
    static Date dd(2001,Date::Jan,1);
    return dd;
}

関数のシグネチャは本当に重要ですか?Date&を* Dateのようなタイプとは思わないので、これがどのような違いをもたらすのかわかりません。返品時にコピーが作成されないようにするだけですか?しかし、それならあなたは&ddを返しませんか?

4

1 に答える 1

3

最初の関数は静的オブジェクトへのconst参照を返すため、次のことができます。

const Date& d = default_date(); // d is a reference to the original

また

Date d = default_date(); // d is a copy of the original, 
                         // provided there is a copy constructor

2つ目はstatic Dateオブジェクトのコピーを作成するため、コピーのみを取得できます

Date d = default_date(); // d is a copy of the original

を返す&ddと、静的オブジェクトのアドレスが返され、それをへのポインタに割り当てることができますDate。returnステートメントの構文は、参照による戻りまたは値による戻りの場合と同じです。セマンティクスは、関数の戻りタイプによって異なります。

C ++では、などの関数default_dateはコンストラクターとは呼ばれないことに注意してください。

于 2012-09-20T05:16:11.487 に答える