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) |
- 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
*(begin() + pos) if pos < size(), or a reference to CharT() if pos == size()(since C++11).
*(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] |