Assignable wrapper (C++20)
|
template
<
class
T
>
requires
std::
copy_constructible
<
T
>
&&
std::
is_object_v
<
T
>
|
(seit C++20)
(bis C++23) ( nur zur Darstellung* ) |
|
|
template
<
class
T
>
requires
std::
move_constructible
<
T
>
&&
std::
is_object_v
<
T
>
|
(seit C++23)
( nur zur Darstellung* ) |
|
ranges::single_view
,
ranges::repeat_view
,
(seit C++23)
und Bereichsadapter, die ein aufrufbares Objekt speichern, werden mittels einer nur zur Darstellung dienenden Klassenvorlage
copyable-box
(bis C++23)
movable-box
(seit C++23)
spezifiziert. Der hier gezeigte Name dient nur Darstellungszwecken.
Der Wrapper verhält sich genau wie
std::
optional
<
T
>
, mit der Ausnahme, dass der Standardkonstruktor, der Kopierzuweisungsoperator und der Verschiebezuweisungsoperator (bedingt) anders sind als die von
std::optional
, was
T
bei Bedarf mit Zuweisbarkeit erweitert und es immer
copyable
oder
movable
(seit C++23)
erfüllen lässt.
|
Falls
|
(bis C++23) |
|
Falls
kann
/*movable-box*/
<
T
>
nur ein
|
(seit C++23) |
Inhaltsverzeichnis |
Template-Parameter
| T | - |
der Typ des enthaltenen Werts, muss ein Objekttyp sein, der
copy_constructible
(bis C++23)
move_constructible
(seit C++23)
modelliert
|
Memberfunktionen
Standardkonstruktor
|
constexpr
/*copyable-box*/
(
)
noexcept
(
std::
is_nothrow_default_constructible_v
<
T
>
)
requires
std::
default_initializable
<
T
>
|
(seit C++20)
(bis C++23) |
|
|
constexpr
/*movable-box*/
(
)
noexcept
(
std::
is_nothrow_default_constructible_v
<
T
>
)
requires
std::
default_initializable
<
T
>
|
(seit C++23) | |
Der Standardkonstruktor wird bereitgestellt, wenn und nur wenn
T
das Konzept
default_initializable
modelliert.
Ein standardkonstruierter Wrapper enthält einen wertinitialisierten
T
-Objekt.
Zuweisungsoperatoren
| (1) | ||
|
constexpr
/*copyable-box*/
&
operator
=
(
const
/*copyable-box*/
&
other
)
;
noexcept ( /* siehe unten */ ) ; |
(seit C++20)
(bis C++23) |
|
|
constexpr
/*movable-box*/
&
operator
=
(
const
/*movable-box*/
&
other
)
;
noexcept ( /* siehe unten */ ) requires std:: copy_constructible < T > ; |
(seit C++23) | |
| (2) | ||
|
constexpr
/*copyable-box*/
&
operator
=
(
/*copyable-box*/
&&
other
)
noexcept ( std:: is_nothrow_move_constructible_v < T > ) ; |
(seit C++20)
(bis C++23) |
|
|
constexpr
/*movable-box*/
&
operator
=
(
/*movable-box*/
&&
other
)
noexcept ( std:: is_nothrow_move_constructible_v < T > ) ; |
(seit C++23) | |
|
constexpr
/*copyable-box*/
&
operator
=
(
const
/*copyable-box*/
&
other
)
|
(bis C++23) |
|
constexpr
/*movable-box*/
&
operator
=
(
const
/*movable-box*/
&
other
)
|
(seit C++23) |
std::optional
.
|
constexpr
/*copyable-box*/
&
operator
=
(
/*copyable-box*/
&&
other
)
|
(bis C++23) |
|
constexpr
/*movable-box*/
&
operator
=
(
/*movable-box*/
&&
other
)
|
(seit C++23) |
std::optional
.
Mitglieder identisch mit std:: optional
Elementfunktionen
konstruiert das
optional
-Objekt
(öffentliche Elementfunktion von
std::optional<T>
)
|
|
|
zerstört den enthaltenen Wert, falls vorhanden
(öffentliche Elementfunktion von
std::optional<T>
)
|
|
|
weist Inhalte zu
(öffentliche Elementfunktion von
std::optional<T>
)
|
|
Beobachter |
|
|
greift auf den enthaltenen Wert zu
(öffentliche Elementfunktion von
std::optional<T>
)
|
|
|
prüft, ob das Objekt einen Wert enthält
(öffentliche Elementfunktion von
std::optional<T>
)
|
|
Modifikatoren |
|
|
zerstört jeden enthaltenen Wert
(öffentliche Elementfunktion von
std::optional<T>
)
|
|
|
konstruiert den enthaltenen Wert direkt
(öffentliche Elementfunktion von
std::optional<T>
)
|
|
Hinweise
Ein
copyable-box
(bis C++23)
movable-box
(seit C++23)
enthält nur dann keinen Wert, wenn
-
Tmodelliert nichtmovableodercopyable, und eine Ausnahme wird bei Move-Zuweisung bzw. Copy-Zuweisung ausgelöst, oder - es wird von einem anderen wertlosen Wrapper initialisiert/zugewiesen.
Vor
P2325R3
wurde der Wrapper im Standard als
semiregular-box
bezeichnet und erfüllte stets
semiregular
, da der Standardkonstruktor immer bereitgestellt wurde (was einen wertlosen Wrapper konstruieren könnte).
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_ranges
|
201911L
|
(C++20) | Ranges-Bibliothek und constrained algorithms |
202106L
|
(C++20)
(DR) |
Nicht- default-initializable Views | |
202207L
|
(C++23) | Lockerung der Range-Adapter für move-only Typen |
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| P2325R3 | C++20 |
falls
T
nicht
default_initializable
ist, konstruiert der Standardkonstruktor
einen Wrapper, der keinen Wert enthält |
der Wrapper ist ebenfalls
nicht
default_initializable
|
| LWG 3572 | C++20 | bedingt unterschiedliche Zuweisungsoperatoren waren nicht constexpr | als constexpr festgelegt |
Siehe auch
eine
view
, die ein einzelnes Element eines bestimmten Wertes enthält
(Klassentemplate) (Anpassungspunktobjekt) |
|
eine
view
, die aus einer generierten Sequenz besteht, indem wiederholt derselbe Wert erzeugt wird
(Klassentemplate) (Anpassungspunktobjekt) |
|
eine
view
, die aus den Elementen eines
range
besteht, die ein Prädikat erfüllen
(Klassentemplate) (Range-Adapterobjekt) |
|
eine
view
einer Sequenz, die eine Transformationsfunktion auf jedes Element anwendet
(Klassentemplate) (Range-Adapterobjekt) |
|
eine
view
, die aus den Anfangselementen einer anderen
view
besteht, bis zum ersten Element, bei dem ein Prädikat
false
zurückgibt
(Klassentemplate) (Range-Adapterobjekt) |
|
eine
view
, die aus den Elementen einer anderen
view
besteht und die anfängliche Teilsequenz von Elementen überspringt, bis zum ersten Element, bei dem das Prädikat
false
zurückgibt
(Klassentemplate) (Range-Adapterobjekt) |
|
eine
view
, die aus Ergebnissen der Anwendung einer Transformationsfunktion auf entsprechende Elemente der angepassten Views besteht
(Klassentemplate) (Anpassungspunktobjekt) |
|
eine
view
, die aus Ergebnissen der Anwendung einer Transformationsfunktion auf benachbarte Elemente des angepassten Views besteht
(Klassentemplate) (Range-Adapterobjekt) |