2016-05-22 16 views
1

私は2つのオーバーロードされた関数を持っています。一つは "値で呼び出す"でもう一つは "参照で呼び出す"です。'値による呼び出し'と '参照による呼び出し'のオーバーロードされた関数の呼び出し方法

int f (int a) 
{ 
    //code 
} 

int f (int &a) 
{ 
    //code 
} 

しかし、私はconst intを渡すと、それはなぜ、「値渡し」関数を呼び出しますか?

const int a=3; 
f(a);//calls the call by value function.Why? 

答えて

7

aconst intであり、従ってそれはあなたがaを変更したくないコンパイラに指示します。のでaは参照によって渡されることはできません(const&のみ)。参照のためfは変更できますが、はconstであるため、fは許可されていません。

したがって、正当な唯一のオーバーロードは値渡し1 - int f(int a)です。

+0

だから、あなたはそのようなタイプの過負荷がないと言いたいですか? –

+1

@ZeeshanAkhterあなたの 'a 'は"参照渡し "関数によって決して呼び出すことができないということです。 – Rakete1111

+0

これを呼び出すには' a'を使用しないでください – Rakete1111

4

const intの左辺値は、intの左辺値に変換することはできません(これは修飾を破棄するためです)。したがって、int&の過負荷は実行可能でなく、デフォルトではintの過負荷が勝ちます。関数の引数はすべて左辺値と右辺値の変換を行い、結果は関数パラメータにバインドされます。

関連する問題