autoとdecltypeの両方がタイプを推測するために使用されるため、同じだろうと思いました。
ただし、この質問への回答は別のことを示唆しています。
それでも、完全に異なることはできないと思います。i
次の両方の場合でタイプが同じになる簡単な例を考えることができます。
auto i = 10; and decltype(10) i = 10;
では、autoとdecltypeが同等に動作する可能性のある状況は何でしょうか。
autoとdecltypeの両方がタイプを推測するために使用されるため、同じだろうと思いました。
ただし、この質問への回答は別のことを示唆しています。
それでも、完全に異なることはできないと思います。i
次の両方の場合でタイプが同じになる簡単な例を考えることができます。
auto i = 10; and decltype(10) i = 10;
では、autoとdecltypeが同等に動作する可能性のある状況は何でしょうか。
auto
テンプレート引数推定とまったく同じように動作します。つまり、それへの参照を指定しないと取得されません。decltype
は単なる式の型であり、参照を考慮します。
#include <type_traits>
int& get_i(){ static int i = 5; return i; }
int main(){
auto i1 = get_i(); // copy
decltype(get_i()) i2 = get_i(); // reference
static_assert(std::is_same<decltype(i1), int>::value, "wut");
static_assert(std::is_same<decltype(i2), int&>::value, "huh");
}