std::basic_string_view<CharT,Traits>::basic_string_view
Depuis fr.cppreference.net
constexpr basic_string_view() noexcept;
|
(1) | (depuis C++17) |
constexpr basic_string_view( const basic_string_view& other ) noexcept = default;
|
(2) | (depuis C++17) |
constexpr basic_string_view( const CharT* s, size_type count );
|
(3) | (depuis C++17) |
constexpr basic_string_view( const CharT* s );
|
(4) | (depuis C++17) |
template< class It, class End >
constexpr basic_string_view( It first, End last );
|
(5) | (depuis C++20) |
template< class R >
constexpr explicit basic_string_view( R&& r );
|
(6) | (depuis C++23) |
basic_string_view( std::nullptr_t ) = delete;
|
(7) | (depuis C++23) |
1) Constructeur par défaut. Construit un
std::basic_string_view vide. Après la construction, data() est égal à nullptr, et size() est égal à 0.2) Constructeur de copie. Construit une vue du même contenu que
other. Après la construction, data() est égal à other.data(), et size() est égal à other.size().3) Construit une vue des premiers
count caractères du tableau de caractères commençant par l'élément pointé par s. s peut contenir des caractères nuls. Le comportement est indéfini si [s, s + count) n'est pas une plage valide (même si le constructeur peut ne pas accéder à certains éléments de cette plage). Après la construction, data() est égal à s, et size() est égal à count.4) Construit une vue de la chaîne de caractères terminée par un caractère nul pointée par
s, sans inclure le caractère nul de terminaison. La longueur de la vue est déterminée comme par Traits::length(s). Le comportement est indéfini si [s, s + Traits::length(s)) n'est pas une plage valide. Après la construction, data() est égal à s, et size() est égal à Traits::length(s).5) Construit un
std::basic_string_view sur la plage [first, last). Le comportement est indéfini si [first, last) n'est pas une plage valide, si It ne modélise pas réellement contiguous_iterator, ou si End ne modélise pas réellement sized_sentinel_for pour It. Après la construction, data() est égal à std::to_address(first), et size() est égal à last - first.
Cette surcharge participe à la résolution de surcharge seulement si toutes les conditions suivantes sont satisfaites :
Itsatisfait contiguous_iterator,Endsatisfait sized_sentinel_for pourIt,std::iter_value_t<It>etCharTsont du même type, etEndn'est pas convertible en std::size_t.
6) Construit un
std::basic_string_view sur la plage r. Après la construction, data() est égal à ranges::data(r), et size() est égal à ranges::size(r).
Cette surcharge participe à la résolution de surcharge seulement si toutes les conditions suivantes sont satisfaites :
std::remove_cvref_t<R>n'est pas du même type questd::basic_string_view,Rmodélise contiguous_range et sized_range,ranges::range_value_t<R>etCharTsont du même type,Rn'est pas convertible enconst CharT*, et- Soit
dune lvalue de typestd::remove_cvref_t<R>,d.operator ::std::basic_string_view<CharT, Traits>()n'est pas une expression valide.
7)
std::basic_string_view ne peut pas être construit à partir de nullptr.Paramètres
| other | - | autre vue avec laquelle initialiser la vue |
| s | - | pointeur vers un tableau de caractères ou une chaîne C avec laquelle initialiser la vue |
| count | - | nombre de caractères à inclure dans la vue |
| first | - | itérateur vers le premier caractère de la séquence |
| last | - | itérateur après le dernier caractère de la séquence ou autre sentinelle |
| r | - | une plage contiguë contenant la séquence |
Complexité
1-3,5,6)
Constant.
4)
Linéaire en fonction de la longueur de
s
.
Exemple
Exécuter ce code
#include <array> #include <iomanip> #include <iostream> #include <string> #include <string_view> int main() { std::string cppstr = "Foo"; std::string_view cppstr_v(cppstr); // surcharge (2), après // std::string::operator string_view std::cout << "1) cppstr_v: " << std::quoted(cppstr_v) << '\n'; char array[3] = {'B', 'a', 'r'}; std::string_view array_v(array, std::size(array)); // surcharge (3) std::cout << "2) array_v: " << std::quoted(array_v) << '\n'; const char* one_0_two = "One\0Two"; std::string_view one_two_v{one_0_two, 7}; // surcharge (3) std::cout << "3) one_two_v: \""; for (char c : one_two_v) std::cout << (c != '\0' ? c : '?'); std::cout << "\", one_two_v.size(): " << one_two_v.size() << '\n'; std::string_view one_v{one_0_two}; // surcharge (4) std::cout << "4) one_v: " << std::quoted(one_v) << ", one_v.size(): " << one_v.size() << '\n'; constexpr std::wstring_view wcstr_v = L"xyzzy"; // surcharge (4) std::cout << "5) wcstr_v.size(): " << wcstr_v.size() << '\n'; std::array ar = {'P', 'u', 'b'}; std::string_view ar_v(ar.begin(), ar.end()); // surcharge (5), C++20 std::cout << "6) ar_v: " << std::quoted(ar_v) << '\n'; // std::string_view ar_v2{ar}; // surcharge (6), OK en C++23 // std::cout << "ar_v2: " << std::quoted(ar_v2) << '\n'; // ar_v2: "Pub" [[maybe_unused]] auto zero = [] { /* ... */ return nullptr; }; // std::string_view s{zero()}; // surcharge (7), ne compile pas depuis C++23 }
Sortie :
1) cppstr_v: "Foo" 2) array_v: "Bar" 3) one_two_v: "One?Two", one_two_v.size(): 7 4) one_v: "One", one_v.size(): 3 5) wcstr_v.size(): 5 6) ar_v: "Pub"
Voir aussi
|
assigne une vue
(fonction membre publique) |
|
construit un
basic_string
(fonction membre publique de
std::basic_string<CharT,Traits,Allocator>
)
|