Пространства имён
Варианты
Действия

std::basic_string<CharT,Traits,Allocator>::operator[]

Материал из cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
Функции-элементы
Доступ к элементам
basic_string::operator[]
Итераторы
Ёмкость
Операции
Поиск
Константы
Правила вывода (C++17)
Функции, не являющиеся элементами
Ввод/Вывод
Сравнение
(до C++20)(до C++20)(до C++20)(до C++20)(до C++20)(C++20)
Числовые преобразования
(C++11)(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
Вспомогательные классы
 
(1)
reference operator[]( size_type pos );
(до C++20)
constexpr reference operator[]( size_type pos );
(начиная с C++20)
(2)
const_reference operator[]( size_type pos ) const;
(до C++20)
constexpr const_reference operator[]( size_type pos ) const;
(начиная с C++20)

Возвращает ссылку на символ в указанном месте pos, если pos < size(), или ссылку на CharT(), если pos == size(). Проверка границ не выполняется.

Если pos > size(), поведение не определ��но.

Для перегрузки (1), если pos == size(), поведение не определено если объект, на который ссылается возвращённая ссылка, изменён в любое значение, кроме CharT() (начиная с C++11).

Содержание

[править] Параметры

pos позиция символа, который нужно вернуть

[править] Возвращаемое значение

*(begin() + pos), если pos < size(), или ссылку на CharT(), если pos == size().

[править] Сложность

Константная.

[править] Пример

#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'; // распечатать как строку C
 
    // Заменяет последний символ s на 'y'
    std::string s("Exemplar ");
    s[s.size() - 1] = 'y'; // эквивалентно s.back() = 'y';
    std::cout << s << '\n';
}

Вывод:

rmx
Exemplar
Exemplary

[править] Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 259 C++98 data()[pos] возвращалось, если pos < size()
(его тип const CharT&, что конфликтует с reference)
изменено на *(begin() + pos)
LWG 2475 C++11 если pos == size(), поведение изменения объекта, на который
ссылается возвращённая ссылка, было неопределённым
чётко определено, если изменяется на CharT()

[править] Смотрите также

обращается к указанному символу с проверкой границ
(public функция-элемент) [править]
(DR*)
получает доступ к первому символу
(public функция-элемент) [править]
(DR*)
получает доступ к последнему символу
(public функция-элемент) [править]
предоставляет доступ к указанному символу
(public функция-элемент std::basic_string_view<CharT,Traits>) [править]