それはコードで最もよく説明されています:
static Unit& None() { static Unit none(....); return none;}
の違いは何ですか?
static const Unit& None() { static Unit none(....); return none;}
それはコードで最もよく説明されています:
static Unit& None() { static Unit none(....); return none;}
の違いは何ですか?
static const Unit& None() { static Unit none(....); return none;}
関数の前は関数の内側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
は、関数シンボルがコンパイル単位からエクスポートされないことを意味します。
静的オブジェクト/変数への参照を返しています。したがって、関数に値を割り当ててから、そのオブジェクト/変数の値を変更することができます。
none
2番目のものは:の値を変更することを拒否します
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
}