Namespaces
Variants

deduction guides for std::basic_string

From cppreference.net
std::basic_string
Definiert in Header <string>
template < class InputIt,

class Alloc = std:: allocator < typename std:: iterator_traits
< InputIt > :: value_type > >
basic_string ( InputIt, InputIt, Alloc = Alloc ( ) )
- > basic_string < typename std:: iterator_traits < InputIt > :: value_type ,
std:: char_traits
< typename std:: iterator_traits < InputIt > :: value_type > ,

Alloc > ;
(1) (seit C++17)
template < class CharT,

class Traits,
class Alloc = std:: allocator < CharT > >
explicit basic_string ( std:: basic_string_view < CharT, Traits > ,
const Alloc & = Alloc ( ) )

- > basic_string < CharT, Traits, Alloc > ;
(2) (seit C++17)
template < class CharT,

class Traits,
class Alloc = std:: allocator < CharT > >
basic_string ( std:: basic_string_view < CharT, Traits > ,
typename /* siehe unten */ :: size_type ,
typename /* siehe unten */ :: size_type ,
const Alloc & = Alloc ( ) )

- > basic_string < CharT, Traits, Alloc > ;
(3) (seit C++17)
template < ranges:: input_range R,

class Alloc = std:: allocator < ranges:: range_value_t < R >> >
basic_string ( std:: from_range_t , R && , Alloc = Alloc ( ) )
- > basic_string < ranges:: range_value_t < R > ,

std:: char_traits < ranges:: range_value_t < R >> , Alloc > ;
(4) (seit C++23)
1) Dieser Deduction Guide wird für std::basic_string bereitgestellt, um die Ableitung aus einem Iteratorbereich zu ermöglichen. Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn InputIt die Anforderungen eines LegacyInputIterator erfüllt und Alloc die Anforderungen eines Allocator erfüllt.
2,3) Diese Deduktion-Guides werden für std::basic_string bereitgestellt, um die Deduktion von einem std::basic_string_view zu ermöglichen. Diese Überladungen nehmen nur dann an der Überladungsauflösung teil, wenn Alloc die Anforderungen eines Allocator erfüllt.
3) Der size_type -Parametertyp bezieht sich auf den geschachtelten Typ size_type des durch den Deduction Guide abgeleiteten Typs.
4) Diese Deduktion-Anleitung wird für std::basic_string bereitgestellt, um die Deduktion von einem std::from_range_t -Tag und einem input_range zu ermöglichen.

Hinweis: Das Ausmaß, in dem die Bibliothek feststellt, dass ein Typ nicht LegacyInputIterator erfüllt, ist nicht spezifiziert, außer dass mindestens integrale Typen nicht als Input-Iteratoren qualifizieren. Ebenso ist das Ausmaß, in dem sie feststellt, dass ein Typ nicht Allocator erfüllt, nicht spezifiziert, außer dass mindestens der Member-Typ Alloc::value_type existieren muss und der Ausdruck std:: declval < Alloc & > ( ) . allocate ( std:: size_t { } ) wohlgeformt sein muss, wenn er als nicht ausgewerteter Operand behandelt wird.

Inhaltsverzeichnis

Hinweise

Führungen ( 2,3 ) werden benötigt, weil die std::basic_string -Konstruktoren für std::basic_string_view s als Templates implementiert sind, um Mehrdeutigkeiten in bestehendem Code zu vermeiden, und diese Templates die Klassentemplate-Argumentableitung nicht unterstützen.

Hinweise

Feature-Test Makro Wert Std Feature
__cpp_lib_containers_ranges 202202L (C++23) Ranges-bewusste Konstruktion und Einfügung; Überladung ( 4 )

Beispiel

#include <cassert>
#include <string>
#include <vector>
int main()
{
    std::vector<char> v = {'a', 'b', 'c'};
    std::basic_string s1(v.begin(), v.end()); // verwendet Deduction Guide (1)
    assert(s1 == "abc");
#if __cpp_lib_containers_ranges >= 202202L
    std::vector<wchar_t> v4{0x43, 43, 053, 0x32, 0x33};
    std::basic_string s4(std::from_range, v4); // verwendet Deduction Guide (4)
    assert(s4 == L"C++23");
#endif
}

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 3075 C++17 Deduktion von basic_string_view wurde nicht unterstützt
(verschärft durch LWG Issue 2946 )
Deduktionsanleitungen hinzugefügt