std::basic_string<CharT,Traits,Allocator>::copy
Материал из cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev ">
</tbody><tbody>
</tbody>
size_type copy( CharT* dest, size_type count, size_type pos = 0 ) const; |
(до C++20) | |
constexpr size_type copy( CharT* dest, size_type count, size_type pos = 0 ) const; |
(начиная с C++20) | |
Копирует подстроку [pos, pos + count) в строку символов, на которую указывает dest. Если запрошенная подстрока выходит за конец строки или если count == npos, скопированная подстрока имеет вид [pos, size()).
Результирующая строка символов не заканчивается нулём.
Параметры
| dest | — | указатель на строку символов назначения |
| count | — | длина подстроки |
| pos | — | позиция первого символа, который будет включен |
Возвращаемое значение
Количество скопированных символов.
Исключения
std::out_of_range, если pos > size().
Если по какой-либо причине генерируется исключение, эта функция не имеет эффекта (строгая гарантия безопасности исключений).
Сложность
Линейная по count.
Пример
Запустить этот код
#include <iostream>
#include <string>
int main()
{
std::string foo("WINE");
// инициализация скобками инициализирует все символы значением 0,
// обеспечивая нулевой терминатор
char bar[4]{};
// не копируйте последний символ, чтобы гарантировать нулевое завершение
foo.copy(bar, sizeof bar - 1);
std::cout << bar << '\n'; // требует, чтобы bar заканчивался нулём
}
Вывод:
WIN
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 847 | C++98 | не было гарантии безопасности исключений | добавлена надёжная гарантия безопасности исключений |
Смотрите также
| возвращает подстроку (public функция-элемент) | |
(C++17) |
копирует символы (public функция-элемент std::basic_string_view<CharT,Traits>)
|
(C++11) |
копирует диапазон элементов в новое место (шаблон функции) |
| копирует один буфер в другой (функция) |