最終更新日時(UTC):
が更新

履歴 編集

function
<exposition-only>

decay-copy(C++20)

template<class T>
constexpr decay_t<T> decay-copy(T&& v) noexcept(is_nothrow_convertible_v<T, decay_t<T>>)
{
  return std::forward<T>(v);
}

概要

以下の型変換をしながら、値をコピーまたはムーブする。

  • 左辺値から右辺値への変換
  • 配列からポインタへの変換
  • 関数の左辺値から関数ポインタへの変換

この関数は、参照ではなくコピーまたはムーブした値であることを明示するために使われる。

例えば、以下のような関数fがあるとき、式f()の効果を「gと等しい」と説明した場合、型はint&になってしまう。そこで、f()の効果を正確に述べるために「decay-copy(g)と等しい」という表現を用いる。

int g = 0;
int f(){ return g; }

戻り値

decay-copy(v)の値は次のようになる。

  1. vが配列型の場合は、先頭要素へのポインタ
  2. vが関数型の場合は、関数へのポインタ
  3. vrvalueの場合は、ムーブしたv
  4. それ以外の場合、コピーしたv

バージョン

言語

  • C++20

参照