◐ Shell
clean mode source ↗

std::basic_string<CharT,Traits,Allocator>::operator[] — cppreference.com

Материал из cppreference.com

<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>

(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';
}

Вывод:

Отчёты о дефектах

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

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

Смотрите также

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