6
は、以下のコードを考えてみます。decltypeが末尾の戻り値型で使用されるのはなぜですか?
template< class T1 , class T2>
auto calc(T1 a , T2 b)
{
return a + b ;
}
template< class T1 , class T2>
auto calc(T1 a , T2 b) -> decltype(a + b)
{
return a + b ;
}
いただきました第二のコードの違い? これは違いがある場合やここで違いがある場合の例をいくつか挙げることができますか?
レックスに答えてくれてありがとう:) [OK]を をので、離れて、両方が同じである保存の参照から。どちらを使うべきか、どちらを使うのが安全でしょうか? –
それはあなたが望むものによって異なります。 'auto'と' auto& 'を使って、戻り型の参照が何であるかを明示します。時には 'decltype'がその利点を持つことがあります。インスタンシエーションなどを遅らせたいSFINAEのコンテキストで使用します。[しかし、それは高度なものです](http://stackoverflow.com/a/24109800/819272)。 – TemplateRex
decltype(auto)はときどき危険です。次に例を示します。 decltype(auto)foo(){auto x = 5; return(x); } (x)は式なので、型はint&(多くの人がこのカッコで囲むサラウンド)です。この関数はローカルへの参照を返します。これはバグです! –