名前空間
変種
操作

「cpp/concepts/move constructible」の版間の差分

提供: cppreference.com
< cpp‎ | concepts
(Milkpot がページ「cpp/concepts/MoveConstructible」を「cpp/concepts/move constructible」に移動しました)
1行: 1行:
{{cpp/title|MoveConstructible}}
+
{{cpp/title|}}
 
{{cpp/concepts/navbar}}
 
{{cpp/concepts/navbar}}
 
{{ddcl|header=concepts|since=c++20|1=
 
{{ddcl|header=concepts|since=c++20|1=
 
template< class T >
 
template< class T >
concept MoveConstructible = std::Constructible<T, T> && std::ConvertibleTo<T, T>;
+
concept = std::<T, T> && std::<T, T>;
 
}}
 
}}
  
コンセプト {{tt|MoveConstructible}} は、 {{tt|T}} が参照型の場合、または通常のセマンティクスを用いた直接初期化およびコピー初期化の両方の文脈においてその型のオブジェクトがその型の右辺値から構築可能であるようなオブジェクト型である場合にのみ、満たされます。
+
コンセプト {{tt|}} は、 {{tt|T}} が参照型の場合、または通常のセマンティクスを用いた直接初期化およびコピー初期化の両方の文脈においてその型のオブジェクトがその型の右辺値から構築可能であるようなオブジェクト型である場合にのみ、満たされます。
  
より正確には、 {{tt|T}} がオブジェクト型であれば、 {{tt|MoveConstructible<T>}} は、以下の内容が満たされる場合にのみ、満たされます。
+
より正確には、 {{tt|T}} がオブジェクト型であれば、 {{tt|<T>}} は、以下の内容が満たされる場合にのみ、満たされます。
 
* {{tt|T}} 型の右辺値 {{tt|rv}}
 
* {{tt|T}} 型の右辺値 {{tt|rv}}
 
* {{tt|rv}} と等しい {{tt|T}} 型の別のオブジェクト {{tt|u2}}
 
* {{tt|rv}} と等しい {{tt|T}} 型の別のオブジェクト {{tt|u2}}

2019年9月16日 (月) 04:02時点における版

ヘッダ <concepts> で定義
template< class T >
concept move_constructible = std::constructible_from<T, T> && std::convertible_to<T, T>;
(C++20以上)

コンセプト move_constructible は、 T が参照型の場合、または通常のセマンティクスを用いた直接初期化およびコピー初期化の両方の文脈においてその型のオブジェクトがその型の右辺値から構築可能であるようなオブジェクト型である場合にのみ、満たされます。

より正確には、 T がオブジェクト型であれば、 move_constructible<T> は、以下の内容が満たされる場合にのみ、満たされます。

  • T 型の右辺値 rv
  • rv と等しい T 型の別のオブジェクト u2

が与えられたとき、以下がすべて真である。

  • 定義 T u = rv; の後、 uu2 と等しい。
  • T(rv)u2 と等しい。
  • T が const 修飾されていなければ、 (上の項目のいずれかの定義または式が評価された後の) rv の結果の状態は有効だけれども未規定である。 そうでなければ、それは変更されない。

関連項目

型が右辺値参照から構築できるかどうか調べます
(クラステンプレート) [edit]