私はついにc++11を読んできました。私はなぜ後尾型が必要なのか理解できません。C++ 11で必要な末尾戻り型の追加はなぜですか?
私は問題を強調するために使用され、次の例に出くわした:
template<class Lhs, class Rhs>
decltype(lhs+rhs) adding_func(const Lhs &lhs, const Rhs &rhs) {return lhs + rhs;}
decltype(lhs+rhs)
が動作しないため、識別子lhs
とrhs
は、解析フェーズの後にのみ有効ですので、例は、違法です。
私の質問は、decltype
タイプの解像度のタイミングについてです。私が間違っていない場合は、キーワードdecltype
を使用して、コンパイル時に式の型を判別します。
すべての解析が完了した後に、decltype
がタイプの解決を実行することに欠点がありません(上の例でうまくいくでしょう)。私が代わりに、C++ 11標準では、トレーリングリターンタイプを提供し
...これが問題を解決するための簡単な方法だっただろうと信じて:
template<class Lhs, class Rhs>
auto adding_func(const Lhs &lhs, const Rhs &rhs) -> decltype(lhs+rhs) {return lhs + rhs;}
私は、私が行方不明です疑いはありません何か、後の戻り値の型の他の使用を見ることができないので。私の推論の欠陥はどこにありますか?
完全な関数本体を解析した後にdecltype
型の解像度を持つことができるので、後ろ向き戻り型はあまりにも複雑な解決策のようです。
あなたの優れた答えをありがとう、私は今の使用を参照してください。私はC++ 14リファレンスのために余分なクッキーを与えることができたらいいと思う! –
C++ 14の場合:それが最終的に含まれる予定ですか?それはドキュメントの面で傷つく世界のように聞こえる... – MFH
@MFH:それは[C++ 14コミュニティドラフト](http://isocpp.org/blog/2013/05/new-paper-n3690-programming-言語 - C委員会ドラフト)。予期しない結果を招いているので、おそらくC++ 14になるだろう。そして、はい、それはドキュメンテーションのために幾分苦痛かもしれません。しかし、もう一度、これは 'decltype'を使用して関数*のコード*に正確に対応する型を推論するような無意味な冗長性を持たないことを意味します。 –