std::basic_string<CharT,Traits,Allocator>::operator[] - cppreference.com (original) (raw)

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 if pos == size():

The behavior is undefined. (until C++11)
Returns a reference to CharT(), if the object referred by the returned reference is modified to any value other than CharT(), the behavior is undefined. (since C++11)
  1. Returns a reference to CharT().
If pos > size() is true, the behavior is undefined. (until C++26)
If pos > size() is true: If the implementation is hardened, a contract violation occurs. Moreover, if the contract-violation handler returns under “observe” evaluation semantic, the behavior is undefined. If the implementation is not hardened, the behavior is undefined. (since C++26)

[edit] Parameters

pos - position of the character to return

[edit] Return value

  1. *(begin() + pos) if pos < size(), or a reference to CharT() if pos == size()(since C++11).

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

[edit] Complexity

Constant.

[edit] Example

#include #include   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:

[edit] 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 overload (1) could return const lvaluedata()[pos], which was ill-formed changed to return*(begin() + pos)
LWG 2475 C++11 if pos == size(), the behavior of modifying theobject referred by the returned reference was undefined well-defined ifmodified to CharT()

[edit] See also

| | accesses the specified character with bounds checking (public member function) [edit] | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | | accesses the first character (public member function) [edit] | | | accesses the last character (public member function) [edit] | | | accesses the specified character (public member function of std::basic_string_view<CharT,Traits>) [edit] |