std::basic_string<CharT,Traits,Allocator>::operator[]
From cppreference.com
< cpp | string | basic string
C++
Feature test macros (C++20)
Concepts library (C++20)
Metaprogramming library (C++11)
Ranges library (C++20)
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
std::basic_string
Literals
Helper classes
Deduction guides (C++17)
(C++23)
basic_string::operator[]
(DR*)
(DR*)
(C++23)
(DR*)
(C++23)
(C++23)
(C++20)
(C++20)
(C++23)
(C++20)(C++20)
(until C++20)(until C++20)(until C++20)(until C++20)(until C++20)(C++20)
(C++11)(C++11)(C++11)
(C++11)(C++11)
(C++14)
(C++11)
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():
1)
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)2) 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.
[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
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
[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 lvalue data()[pos], which was ill-formed |
changed to return *(begin() + pos) |
LWG 2475 | C++11 | if pos == size(), the behavior of modifying the object referred by the returned reference was undefined |
well-defined if modified to CharT() |
[edit] See also
accesses the specified character
(public member function of
(public member function of
std::basic_string_view<CharT,Traits>
) [edit]