std::basic_string::operator[](3)

NAME
std::basic_string::operator[] - std::basic_string::operator[]

Synopsis
   CharT& operator[]( size_type pos ); (1) (constexpr since C++20)
   const CharT& operator[]( size_type pos ) const; (2) (constexpr since C++20)
   Returns a reference to the character at specified location pos if pos < size(), or a
   reference to CharT() if pos == size(). No bounds checking is performed.
   If pos > size(), the behavior is undefined.
   For overload (1), if pos == size(), the behavior is undefined
   if the object referred by the returned reference is modified to any value other than
   CharT()
   (since C++11).

Parameters
   pos - position of the character to return

Return value
   *(begin() + pos) if pos < size(), or a reference to CharT() if pos == size().

Complexity
   Constant.

Example
// Run this code
 #include <iostream>
 #include <string>
 int main()
 {
     const std::string e("Exemplar");
     for (unsigned i = e.length() - 1; i != 0; i /= 2)
         std::cout << e[i];
     std::cout << '\n';
     const char* c = &e[0];
     std::cout << c << '\n'; // print as a C string
     // Change the last character of s into a 'y'
     std::string s("Exemplar ");
     s[s.size() - 1] = 'y'; // equivalent to s.back() = 'y';
     std::cout << s << '\n';
 }

Output:
 rmx
 Exemplar
 Exemplary
   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 259 C++98 non-const overload could return const lvalue changed to return
                       data()[pos], which was ill-formed *(begin() + pos)
                       if pos == size(), the behavior of modifying
   LWG 2475 C++11 the well-defined if
                       object referred by the returned reference modified to CharT()
                       was undefined

See also
   at accesses the specified character with bounds checking
              (public member function)
   front accesses the first character
   (DR*) (public member function)
   back accesses the last character
   (DR*) (public member function)
   operator[] accesses the specified character
              (public member function of std::basic_string_view<CharT,Traits>)