1

autoとdecltypeの両方がタイプを推測するために使用されるため、同じだろうと思いました。

ただし、この質問への回答は別のことを示唆しています。

それでも、完全に異なることはできないと思います。i次の両方の場合でタイプが同じになる簡単な例を考えることができます。

auto i = 10; and decltype(10) i = 10;

では、autoとdecltypeが同等に動作する可能性のある状況は何でしょうか。

4

1 に答える 1

7

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");
}

Ideone での実例。

于 2012-07-12T20:21:13.293 に答える