Namespaces
Variants

std::basic_string_view<CharT,Traits>::basic_string_view

Depuis fr.cppreference.net


 
 
 
std::basic_string_view
 
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 [ss + 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 [ss + 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 [firstlast). Le comportement est indéfini si [firstlast) 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 :

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 que std::basic_string_view,
  • R modélise contiguous_range et sized_range,
  • ranges::range_value_t<R> et CharT sont du même type,
  • R n'est pas convertible en const CharT*, et
  • Soit d une lvalue de type std::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

#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> )