2016-09-10 13 views
2

参照の唯一の目的はエイリアシングです。参照(定数intを参照する)を整数に代入するのは、エイリアスではないので、不合理に思えます(エラーは発生しません)。私は定数intそれ自体を定義するのと似ていると思います。違いはありますか?const intとx = 4とconst int x = 4の差異

+0

*違い*どの意味ですか?言語的な観点からは違いがあります。実際には、この特定のケースでは違いはありません。 – Nawaz

+0

文脈の問題。これは正式な議論かどうか? –

答えて

2

関数本体またはファイルスコープ内では、唯一の違いはdecltype(x)です。あるケースでは、それはint constであり、他方はint const&である。

const int & x=7;は、値7の一時的な匿名intを作成します。次に、参照番号xをバインドします。一時的なものの寿命は、基準のものまで延長されています。これは、基本的にxと値が7const intという名前が区別できません。

メンバーの初期化の一部としてオブジェクトのコンストラクタ内でバインディングが発生する場合がほとんど同じです。その場合、寿命は延長されない。

は、私はあなたがこれを誘導することができる疑う:

struct Foo{ 
    int const& x=7; 
    Foo(){}; 
}; 

いずれかの上記の構文が不正であるか、それは一方で、(参照のための標準的なコーナーケースがある場合、私は覚えていません)ぶら下がっ:

struct Foo{ 
    int const x=7; 
    Foo(){}; 
}; 

は合法であり、ぶら下がりません。だから違いがある。

ファンクションのパラメータとしても違いがあります。=7は単にデフォルトを提供するだけです。

関連する問題