std:: basic_string
| 
           Defined in header
            
            
             <string>
            
            | ||
| 
           
            
             template
            
            
             <
            
             
             
              class
             
             CharT,
              | (1) | |
| 
           
            
             namespace
            
            pmr
            
             {
            
             
             
              template
             
             
              <
             
              | (2) | (since C++17) | 
       The class template
       
        basic_string
       
       stores and manipulates sequences of
       
        character
       
       -like objects, which are non-array objects of
       
        
         TrivialType
        
       
       and
       
        
         StandardLayoutType
        
       
       . The class is dependent neither on the character type nor on the nature of operations on that type. The definitions of the operations are supplied via the
       
        Traits
       
       template parameter - a specialization of
       
        
         std::char_traits
        
       
       or a compatible traits class.
      
       The elements of a
       
        basic_string
       
       are stored contiguously, that is, for a
       
        basic_string
       
       
        
         s
        
       
       ,
       
        
         
          &
         
         
          *
         
         
          (
         
         s.
         
          begin
         
         
          (
         
         
          )
         
         
          +
         
         n
         
          )
         
         
          ==
         
         
          &
         
         
          *
         
         s.
         
          begin
         
         
          (
         
         
          )
         
         
          +
         
         n
        
       
       for any
       
        
         n
        
       
       in
       
        
         [
        
        
         
          
          
           0
          
          
         
        
        
         ,
        
        
         
          s.
          
           size
          
          
           (
          
          
           )
          
         
        
        
         )
        
       
       
        
         , and
         
          
           
            *
           
           
            (
           
           s.
           
            begin
           
           
            (
           
           
            )
           
           
            +
           
           s.
           
            size
           
           
            (
           
           
            )
           
           
            )
           
          
         
         has value
         
          
           CharT
           
            (
           
           
            )
           
          
         
         (a null terminator)
        
        
         
          (since C++11)
         
        
       
       ; or, equivalently, a pointer to
       
        
         s
         
          [
         
         
          0
         
         
          ]
         
        
       
       can be passed to functions that expect a pointer to the first element of
       
        
         an array
        
        
         
          (until C++11)
         
        
       
       
        
         a null-terminated array
        
        
         
          (since C++11)
         
        
       
       of
       
        CharT
       
       .
      
       
        std::basic_string
       
       satisfies the requirements of
       
        
         AllocatorAwareContainer
        
       
       (except that customized
       
        construct
       
       /
       
        destroy
       
       are not used for construction/destruction of elements),
       
        
         SequenceContainer
        
       
       
        
         and
         
          
           ContiguousContainer
          
         
        
        
         
          (since C++17)
         
        
       
       .
      
       If any of
       
        Traits::char_type
       
       and
       
        Allocator::char_type
       
       is different from
       
        CharT
       
       , the program is ill-formed.
      
| 
          Member functions of
           
          However,
           | (since C++20) | 
Several typedefs for common character types are provided:
| 
          Defined in header
           
           
            <string>
           
           | |
| Type | Definition | 
| 
          std::string
          | std :: basic_string < char > | 
| 
          std::wstring
          | std :: basic_string < wchar_t > | 
| 
          std::u8string
         (C++20) | std :: basic_string < char8_t > | 
| 
          std::u16string
         (C++11) | std :: basic_string < char16_t > | 
| 
          std::u32string
         (C++11) | std :: basic_string < char32_t > | 
| 
          std::pmr::string
         (C++17) | std :: pmr :: basic_string < char > | 
| 
          std::pmr::wstring
         (C++17) | std :: pmr :: basic_string < wchar_t > | 
| 
          std::pmr::u8string
         (C++20) | std :: pmr :: basic_string < char8_t > | 
| 
          std::pmr::u16string
         (C++17) | std :: pmr :: basic_string < char16_t > | 
| 
          std::pmr::u32string
         (C++17) | std :: pmr :: basic_string < char32_t > | 
Template parameters
| CharT | - | character type | 
| Traits | - | traits class specifying the operations on the character type | 
| Allocator | - | Allocator type used to allocate internal storage | 
Nested types
| Type | Definition | ||||
| 
          traits_type
          | 
          Traits
          | ||||
| 
          value_type
          | 
          CharT
          | ||||
| 
          allocator_type
          | 
          Allocator
          | ||||
| 
          size_type
          | 
 | ||||
| 
          difference_type
          | 
 | ||||
| 
          reference
          | value_type & | ||||
| 
          const_reference
          | const value_type & | ||||
| 
          pointer
          | 
 | ||||
| 
          const_pointer
          | 
 | ||||
| 
          iterator
          | 
 | ||||
| 
          const_iterator
          | 
 | ||||
| 
          reverse_iterator
          | std:: reverse_iterator < iterator > | ||||
| 
          const_reverse_iterator
          | std:: reverse_iterator < const_iterator > | 
Data members
| constexpr
           
           size_type 
          npos
         [static] | the special value size_type ( - 1 ) , its exact meaning depends on the context | 
Member functions
| constructs a 
          basic_string
         (public member function) | |
| destroys the string, deallocating internal storage if used (public member function) | |
| assigns values to the string (public member function) | |
| assign characters to a string (public member function) | |
| 
           
            
             
              (C++23)
             
            
           
           | assign a range of characters to a string (public member function) | 
| returns the associated allocator (public member function) | |
| Element access | |
| accesses the specified character with bounds checking (public member function) | |
| accesses the specified character (public member function) | |
| 
           
            
             
              (
              
               DR*
              
              )
             
            
           
           | accesses the first character (public member function) | 
| 
           
            
             
              (
              
               DR*
              
              )
             
            
           
           | accesses the last character (public member function) | 
| returns a pointer to the first character of a string (public member function) | |
| returns a non-modifiable standard C character array version of the string (public member function) | |
| 
           
            
             
              (C++17)
             
            
           
           | returns a non-modifiable 
          basic_string_view
         into the entire string(public member function) | 
| Iterators | |
| 
           
            
            
            
             
              (C++11)
             
            
           
           | returns an iterator to the beginning (public member function) | 
| 
           
            
            
            
             
              (C++11)
             
            
           
           | returns an iterator to the end (public member function) | 
| 
           
            
            
            
             
              (C++11)
             
            
           
           | returns a reverse iterator to the beginning (public member function) | 
| 
           
            
            
            
             
              (C++11)
             
            
           
           | returns a reverse iterator to the end (public member function) | 
| Capacity | |
| checks whether the string is empty (public member function) | |
| returns the number of characters (public member function) | |
| returns the maximum number of characters (public member function) | |
| reserves storage (public member function) | |
| returns the number of characters that can be held in currently allocated storage (public member function) | |
| 
           
            
             
              (
              
               DR*
              
              )
             
            
           
           | reduces memory usage by freeing unused memory (public member function) | 
| Modifiers | |
| clears the contents (public member function) | |
| inserts characters (public member function) | |
| 
           
            
             
              (C++23)
             
            
           
           | inserts a range of characters (public member function) | 
| removes characters (public member function) | |
| appends a character to the end (public member function) | |
| 
           
            
             
              (
              
               DR*
              
              )
             
            
           
           | removes the last character (public member function) | 
| appends characters to the end (public member function) | |
| 
           
            
             
              (C++23)
             
            
           
           | appends a range of characters to the end (public member function) | 
| appends characters to the end (public member function) | |
| replaces specified portion of a string (public member function) | |
| 
           
            
             
              (C++23)
             
            
           
           | replaces specified portion of a string with a range of characters (public member function) | 
| copies characters (public member function) | |
| changes the number of characters stored (public member function) | |
| 
           
            
             
              (C++23)
             
            
           
           | changes the number of characters stored and possibly overwrites indeterminate contents via user-provided operation (public member function) | 
| swaps the contents (public member function) | |
| Search | |
| finds the first occurrence of the given substring (public member function) | |
| find the last occurrence of a substring (public member function) | |
| find first occurrence of characters (public member function) | |
| find first absence of characters (public member function) | |
| find last occurrence of characters (public member function) | |
| find last absence of characters (public member function) | |
| Operations | |
| compares two strings (public member function) | |
| 
           
            
             
              (C++20)
             
            
           
           | checks if the string starts with the given prefix (public member function) | 
| 
           
            
             
              (C++20)
             
            
           
           | checks if the string ends with the given suffix (public member function) | 
| 
           
            
             
              (C++23)
             
            
           
           | checks if the string contains the given substring or character (public member function) | 
| returns a substring (public member function) | |
Non-member functions
| concatenates two strings, a string and a
         
          
           char
          
         
         , or a string and
         
          
           string_view (function template) | |
| 
           
            
            
            
             
              (removed in C++20)
             
            
            
             
              (removed in C++20)
             
            
            
             
              (removed in C++20)
             
            
            
             
              (removed in C++20)
             
            
            
             
              (removed in C++20)
             
            
            
             
              (C++20)
             
            
           
           | lexicographically compares two strings (function template) | 
| specializes the
         
          
           std::swap
          
         
         algorithm (function template) | |
| erases all elements satisfying specific criteria (function template) | |
| Input/output | |
| performs stream input and output on strings (function template) | |
| read data from an I/O stream into a string (function template) | |
| Numeric conversions | |
| 
           
            
             
              (C++11)
             
            
            
             
              (C++11)
             
            
            
             
              (C++11)
             
            
           
           | converts a string to a signed integer (function) | 
| 
           
            
             
              (C++11)
             
            
            
             
              (C++11)
             
            
           
           | converts a string to an unsigned integer (function) | 
| 
           
            
             
              (C++11)
             
            
            
             
              (C++11)
             
            
            
             
              (C++11)
             
            
           
           | converts a string to a floating point value (function) | 
| 
           
            
             
              (C++11)
             
            
           
           | converts an integral or floating-point value to 
          string
         (function) | 
| 
           
            
             
              (C++11)
             
            
           
           | converts an integral or floating-point value to 
          wstring
         (function) | 
Literals
| 
          Defined in inline namespace
           
           std::literals::string_literals
           | |
| 
           
            
             
              (C++14)
             
            
           
           | converts a character array literal to 
          basic_string
         (function) | 
Helper classes
| 
           
            
             
              (C++11)
             
            
           
           | hash support for strings (class template specialization) | 
Deduction guides (since C++17)
Iterator invalidation
       References, pointers, and iterators referring to the elements of a
       
        basic_string
       
       may be invalidated by any standard library function taking a reference to non-const
       
        basic_string
       
       as an argument, such as
       
        
         std::getline
        
       
       ,
       
        
         std::swap
        
       
       , or
       
        
         operator>>
        
       
       , and by calling non-const member functions, except
       
        
         operator[]
        
       
       ,
       
        
         at
        
       
       ,
       
        
         data
        
       
       ,
       
        
         front
        
       
       ,
       
        
         back
        
       
       ,
       
        
         begin
        
       
       ,
       
        
         rbegin
        
       
       ,
       
        
         end
        
       
       , and
       
        
         rend
        
       
       .
      
Notes
       Although it is required that customized
       
        construct
       
       or
       
        destroy
       
       is used when constructing or destroying elements of
       
        std::basic_string
       
       until C++23, all implementations only used the default mechanism. The requirement is corrected by
       
        P1072R10
       
       to match existing practice.
      
| Feature-test macro | Value | Std | Feature | 
|---|---|---|---|
| 
           __cpp_lib_string_udls
           | 201304L | (C++14) | User-defined literals for string types | 
| 
           __cpp_lib_starts_ends_with
           | 201711L | (C++20) | 
           starts_with
          ,
           ends_with
           | 
| 
           __cpp_lib_constexpr_string
           | 201907L | (C++20) | Constexpr for 
          std::basic_string
          | 
| 
           __cpp_lib_char8_t
           | 201907L | (C++20) | 
          std::u8string
          | 
| 
           __cpp_lib_erase_if
           | 202002L | (C++20) | 
           erase
          ,
           erase_if
           | 
| 
           __cpp_lib_string_contains
           | 202011L | (C++23) | 
           contains
           | 
| 
           __cpp_lib_string_resize_and_overwrite
           | 202110L | (C++23) | 
           resize_and_overwrite
           | 
| 
           __cpp_lib_containers_ranges
           | 202202L | (C++23) | Member functions for construction, insertion, and replacement that accept container compatible range | 
Example
#include <iostream> #include <string> int main() { using namespace std::literals; // Creating a string from const char* std::string str1 = "hello"; // Creating a string using string literal auto str2 = "world"s; // Concatenating strings std::string str3 = str1 + " " + str2; // Print out the result std::cout << str3 << '\n'; std::string::size_type pos = str3.find(" "); str1 = str3.substr(pos + 1); // the part after the space str2 = str3.substr(0, pos); // the part till the space std::cout << str1 << ' ' << str2 << '\n'; // Accessing an element using subscript operator[] std::cout << str1[0] << '\n'; str1[0] = 'W'; std::cout << str1 << '\n'; }
Output:
hello world world hello w World
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior | 
|---|---|---|---|
| LWG 530 | C++98 | contiguity of the storage for elements of 
          basic_string
         was accidently made not required by LWG259 | required again | 
| LWG 2861 | C++98 | 
          value_type
         was
          Traits::char_type
          | changed to 
          CharT
          | 
| LWG 2994 ( P1148R0 ) | C++98 | the behavior is undefined if any of 
          Traits::char_type
         [1]and 
          Allocator::char_type
         is different from
          CharT
          | the program is ill-formed in this case | 
See also
| 
           
            
             
              (C++17)
             
            
           
           | read-only string view (class template) | 
External links
| C++ string handling |