std::basic_string<CharT,Traits,Allocator>::copy — cppreference.com
Материал из cppreference.com
<tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody>
|
|
(до C++20) | |
|
|
(начиная с 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 заканчивался нулём }
Вывод:
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 847 | C++98 | не было гарантии безопасности исключений | добавлена надёжная гарантия безопасности исключений |