2017-08-26 17 views
-4
const int& foo(int i) 
{ 
    return i; 
} 

コンピュータ科学の学生として、私はこの機能がどのように機能するのだろうかと思っています。関数の宣言では、戻り値の型はintへのconst参照ですが、渡された関数の内部は単なるint型です。私が読んだイントロの本のほとんどは、戻り値の型は返すものと一致する必要があります。実際に何が起こっていますか?C++関数の戻りタイプ

+0

const intとtemp = Iのようなものがあると仮定できますか?この関数から返されるものはtempですか? –

+0

最適化がなければ、はい。最適化では、.thingsは異なる可能性があります。 – iBug

+0

最適な例を教えてください。ありがとうございました。 –

答えて

1

関数宣言では戻り型がintへのconst参照であるが、関数の内部で私たちが通過するだけ

におけるC++は、例えば、暗黙的な変換を有している。

double function(int n) { 
    return n; 
} 

intからdoubleへの暗黙的な変換があります。

あなたの場合は、intから参照への変換があります。これは正しくコンパイルされますが、この場合、変数は関数の最後に "削除"されます。これは後で使用すると問題になることがありますが、これはaと見なされますundefined behaviour