Namespaces
Variants

std::mdspan<T,Extents,LayoutPolicy,AccessorPolicy>:: mdspan

From cppreference.net
constexpr mdspan ( ) ;
(1) (seit C++23)
template < class ... OtherIndexTypes >
constexpr explicit mdspan ( data_handle_type p, OtherIndexTypes... exts ) ;
(2) (seit C++23)
template < class OtherIndexType, std:: size_t N >

constexpr explicit ( N ! = rank_dynamic ( ) )

mdspan ( data_handle_type p, std:: span < OtherIndexType, N > exts ) ;
(3) (seit C++23)
template < class OtherIndexType, std:: size_t N >

constexpr explicit ( N ! = rank_dynamic ( ) )
mdspan ( data_handle_type p,

const std:: array < OtherIndexType, N > & exts ) ;
(4) (seit C++23)
constexpr mdspan ( data_handle_type p, const extents_type & ext ) ;
(5) (seit C++23)
constexpr mdspan ( data_handle_type p, const mapping_type & m ) ;
(6) (seit C++23)
constexpr mdspan ( data_handle_type p, const mapping_type & m,
const accessor_type & a ) ;
(7) (seit C++23)
template < class OtherElementType, class OtherExtents,

class OtherLayoutPolicy, class OtherAccessor >
constexpr explicit ( /* siehe unten */ )
mdspan ( const mdspan < OtherElementType, OtherExtents,

OtherLayoutPolicy, OtherAccessor > & other ) ;
(8) (seit C++23)
constexpr mdspan ( const mdspan & rhs ) = default ;
(9) (seit C++23)
constexpr mdspan ( mdspan && rhs ) = default ;
(10) (seit C++23)

Konstruiert einen mdspan , optional unter Verwendung eines benutzerdefinierten Datenhandles p , Layout-Mappings m und Accessors a . Falls Extents exts oder ext angegeben werden, werden diese in extents_type konvertiert und zur Initialisierung des Layout-Mappings verwendet.

Inhaltsverzeichnis

Parameter

p - ein Handle auf die zugrundeliegenden Daten
m - ein Layout-Mapping
a - ein Accessor
ext - ein std::extents Objekt
exts - repräsentiert mehrdimensionale Extents
other - ein weiterer mdspan zur Konvertierung
rhs - ein weiterer mdspan zum Kopieren oder Verschieben

Effekte

Für die in der folgenden Tabelle aufgeführten Datenmitglieder:

Überladung Initialisierer für...
ptr_ map_ acc_
( 1 ) (leer)
( 2 ) std :: move ( p ) extents_type
( static_cast < index_type >
( std :: move ( exts ) ) ... )
(leer)
( 3 ) extents_type ( exts )
( 4 )
( 5 ) ext
( 6 ) m
( 7 ) a
( 8 ) other. ptr_ other. map_ other. acc_

Einschränkungen und ergänzende Informationen

1) Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn alle folgenden Werte true sind:
Wenn [ 0 , map_  . required_span_size ( ) ) kein accessible range von ptr_ und acc_ für die Werte von map_ und acc_ nach dem Aufruf dieses Konstruktors ist, ist das Verhalten undefiniert.
2) Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn alle folgenden Werte true sind:
Wenn [ 0 , map_  . required_span_size ( ) ) kein zugreifbarer Bereich von p und acc_ für die Werte von map_ und acc_ nach dem Aufruf dieser Konstruktoren ist, ist das Verhalten undefiniert.
3,4) Diese Überladungen nehmen nur dann an der Überladungsauflösung teil, wenn alle folgenden Werte true sind:
Wenn [ 0 , map_  . required_span_size ( ) ) kein zugreifbarer Bereich von p und acc_ für die Werte von map_ und acc_ nach dem Aufruf dieser Konstruktoren ist, ist das Verhalten undefiniert.
5) Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn alle folgenden Werte true sind:
Wenn [ 0 , map_  . required_span_size ( ) ) kein zugreifbarer Bereich von p und acc_ für die Werte von map_ und acc_ nach dem Aufruf dieser Konstruktoren ist, ist das Verhalten undefiniert.
6) Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn std:: is_default_constructible_v < accessor_type > true ist.
Wenn [ 0 , m. required_span_size ( ) ) kein zugreifbarer Bereich von p und acc_ für den Wert von acc_ nach dem Aufruf dieses Konstruktors ist, ist das Verhalten undefiniert.
7) Wenn [ 0 , m. required_span_size ( ) ) kein zugreifbarer Bereich von p und a ist, ist das Verhalten undefiniert.
8) Der Ausdruck innerhalb von explicit ist äquivalent zu ! std:: is_convertible_v < const OtherLayoutPolicy :: template mapping < OtherExtents > & ,
mapping_type >
|| ! std:: is_convertible_v < const OtherAccessor & , accessor_type >
.
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn alle folgenden Werte true sind:
Wenn einer der folgenden Werte false ist, ist das Programm fehlerhaft:
Wenn [ 0 , map_  . required_span_size ( ) ) kein zugreifbarer Bereich von ptr_ und acc_ für die Werte von ptr_ , map_ und acc_ nach dem Aufruf dieses Konstruktors ist, ist das Verhalten undefiniert.

Wenn static_extent ( r ) == std:: dynamic_extent
|| static_extent ( r ) == other. extent ( r )
für einen Rangindex r von extents_type false ist, ist das Verhalten undefiniert.

(bis C++26)

Wenn static_extent ( r ) == std:: dynamic_extent
|| static_extent ( r ) == other. extent ( r )
für einen Rangindex r von extents_type false ist:

  • Wenn die Implementierung gehärtet ist, tritt eine Vertragsverletzung auf. Wenn der Vertragsverletzungs-Handler unter "observe"-Auswertungssemantik zurückkehrt, ist das Verhalten undefiniert.
  • Wenn die Implementierung nicht gehärtet ist, ist das Verhalten undefiniert.
(seit C++26)

Beispiel

Referenzen

  • C++23-Standard (ISO/IEC 14882:2024):
  • 24.7.3.6.2 Konstruktoren [mdspan.mdspan.cons]

Siehe auch