Skip to content

Latest commit

 

History

History
50 lines (39 loc) · 1.74 KB

decay-copy.md

File metadata and controls

50 lines (39 loc) · 1.74 KB

decay-copy

  • exposition-only[meta header]
  • function[meta id-type]
  • cpp20[meta cpp]
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);
}
  • decay-copy[italic]
  • forward[link /reference/utility/forward.md]
  • decay_t[link /reference/type_traits/decay.md]
  • decay_t[link /reference/type_traits/decay.md]
  • is_nothrow_convertible_v[link /reference/type_traits/is_nothrow_convertible.md]

概要

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

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

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

例えば、以下のような関数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

参照