1

それはコードで最もよく説明されています:

static Unit& None() { static Unit none(....); return none;}

の違いは何ですか?

static const Unit& None() { static Unit none(....); return none;}
4

2 に答える 2

4

関数の前は関数の内側staticとは完全に異なります1。特に、returntypeとはまったく関係ありません。これらの関数の戻り値のタイプは、次のとおりです。static

Unit& None() { static Unit none(....); return none;}

const Unit& None() { static Unit none(....); return none;}

つまり、static修飾子なし。

したがって、違いはとの間だけUnit&ですUnit const&。最初の方法では戻り値を変更できますが、2番目の方法では変更できません。


1)クラスメンバーの場合static、関数がクラスのインスタンス変数およびインスタンス関数にアクセスできないことを意味します。名前空間スコープ関数でstaticは、関数シンボルがコンパイル単位からエクスポートされないことを意味します。

于 2013-03-18T13:49:33.603 に答える
2

静的オブジェクト/変数への参照を返しています。したがって、関数に値を割り当ててから、そのオブジェクト/変数の値を変更することができます。

none2番目のものは:の値を変更することを拒否します

static int& func1()
{
    static int a = 1; return a;
}

static const int& func2()
{
    static int a = 1; return a;
}

int main()
{
    func1() = 10;    // OK
    func2() = 10;    // error: assignment of read-only location
}
于 2013-03-18T13:49:43.733 に答える