タグ付けされた質問 「return-type-deduction」

2
decltype(auto)の用途は何ですか?
OverаэтотвопросестьответынаStack Overflowнарусском:Конструкцияdecltype(auto) c ++ 14では、decltype(auto)イディオムが導入されています。 通常、その使用は、auto宣言でdecltype指定された式のルールを使用できるようにすることです。 イディオムの "良い"使用法の例を検索すると、(Scott Meyersによる)次のようなもの、つまり関数の戻り値の型の推定についてしか考えることができません。 template<typename ContainerType, typename IndexType> // C++14 decltype(auto) grab(ContainerType&& container, IndexType&& index) { authenticateUser(); return std::forward<ContainerType>(container)[std::forward<IndexType>(index)]; } この新しい言語機能が役立つ他の例はありますか?

7
C ++ 14の自動戻り型の控除はいつ使用する必要がありますか?
GCC 4.8.0がリリースされると、C ++ 14の一部である自動戻り型の推論をサポートするコンパイラーが提供されます。で-std=c++1y、これを行うことができます: auto foo() { //deduced to be int return 5; } 私の質問は次のとおりです。いつこの機能を使用すればよいですか?いつそれが必要で、いつコードがよりクリーンになりますか? シナリオ1 私が考えることができる最初のシナリオは、可能な限りです。このように書くことができるすべての関数はそうあるべきです。これの問題は、コードが読みやすくなるとは限らないことです。 シナリオ2 次のシナリオは、より複雑な戻り値の型を回避することです。非常に軽い例として: template<typename T, typename U> auto add(T t, U u) { //almost deduced as decltype(t + u): decltype(auto) would return t + u; } 私はそれが本当に問題になるとは思いませんが、戻り値の型を明示的にパラメーターに依存させる方が明確な場合もあります。 シナリオ3 次に、冗長性を防ぐには: auto foo() { std::vector<std::map<std::pair<int, double>, …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.