24 Strings library [strings]

24.3 String classes [string.classes]

24.3.2 Class template basic_­string [basic.string]

24.3.2.2 basic_­string constructors and assignment operators [string.cons]

explicit basic_string(const Allocator& a) noexcept;

Effects: Создает объект класса basic_­string. Постусловия этой функции указаны в таблице55.

Таблица55 -basic_­string(const Allocator&) эффекты
ЭлементЦенить
data() ненулевой указатель, который можно копировать и к нему можно добавить 0
size() 0
capacity() неуказанное значение

basic_string(const basic_string& str); basic_string(basic_string&& str) noexcept;

Effects: Создает объект класса, basic_­string как указано в Табл56. Во второй формеstr остается в допустимом состоянии с неопределенным значением.

Таблица56 -basic_­string(const basic_­string&) эффекты
ЭлементЦенить
data() указывает на первый элемент выделенной копии массива, на первый элемент которого указываетstr.data()
size() str.size()
capacity() значение, по крайней мере, такое большое, какsize()

basic_string(const basic_string& str, size_type pos, const Allocator& a = Allocator());

Throws: out_­of_­range если pos > str.size().

Effects: Создает объект класса basic_­string и определяет эффективную длинуrlen начального строкового значенияstr.size() - pos, как указано в Табл57.

basic_string(const basic_string& str, size_type pos, size_type n, const Allocator& a = Allocator());

Throws: out_­of_­range еслиpos > str.size().

Effects: Создает объект классаbasic_­string и определяет эффективную длинуrlen начального строкового значения как меньшее изn иstr.size() - pos, как указано в таблице57.

Таблица57 - и эффектыbasic_­string(const basic_­string&, size_­type, const Allocator&)
basic_­string(const basic_­string&, size_­type, size_­type, const Allocator&)
ЭлементЦенить
data() указывает на первый элемент выделенной копииrlen последовательных элементов строки, управляемойstr начиная с позицииpos
size() rlen
capacity() значение, по крайней мере, такое большое, какsize()

template<class T> basic_string(const T& t, size_type pos, size_type n, const Allocator& a = Allocator());

Effects: Создает переменную,svкак если бы by,basic_­string_­view<charT, traits> sv = t; а затем ведет себя так же, как:

basic_string(sv.substr(pos, n), a);

Remarks: Этот конструктор не должен участвовать в разрешении перегрузки , еслиis_­convertible_­v<const T&, basic_­string_­view<charT, traits>> неtrue.

explicit basic_string(basic_string_view<charT, traits> sv, const Allocator& a = Allocator());

Effects: То же, что иbasic_­string(sv.data(), sv.size(), a).

basic_string(const charT* s, size_type n, const Allocator& a = Allocator());

Requires: s указывает на массив, состоящий как минимум изn элементовcharT.

Effects: Создает объект класса basic_­string и определяет его начальное строковое значение из массива charT длиныn , первый элемент которого обозначенs, как указано в таблице58.

Таблица58 -basic_­string(const charT*, size_­type, const Allocator&) эффекты
ЭлементЦенить
data() указывает на первый элемент выделенной копии массива, на первый элемент которого указываетs
size() n
capacity() значение, по крайней мере, такое большое, какsize()

basic_string(const charT* s, const Allocator& a = Allocator());

Requires: s указывает на массив, состоящий как минимум изtraits​::​length(s) + 1 элементовcharT.

Effects: Создает объект класса basic_­string и определяет его начальное строковое значение из массива charT длины traits​::​length(s) , первый элемент которого обозначенs, как указано в таблице59.

Таблица59 -basic_­string(const charT*, const Allocator&) эффекты
ЭлементЦенить
data() указывает на первый элемент выделенной копии массива, на первый элемент которого указываетs
size() traits​::​length(s)
capacity() значение, по крайней мере, такое большое, какsize()

basic_string(size_type n, charT c, const Allocator& a = Allocator());

Requires: n < npos.

Effects: Создает объект класса basic_­string и определяет его начальное строковое значение, повторяя объект типа charc для всехn элементов, как указано в таблице60.

Таблица60 -basic_­string(size_­t, charT, const Allocator&) эффекты
ЭлементЦенить
data() указывает на первый элемент выделенного массиваn элементов, каждый из которых хранит начальное значениеc
size() n
capacity() значение, по крайней мере, такое большое, какsize()

template<class InputIterator> basic_string(InputIterator begin, InputIterator end, const Allocator& a = Allocator());

Effects: ЕслиInputIterator это целочисленный тип, эквивалентный:

basic_string(static_cast<size_type>(begin), static_cast<value_type>(end), a);

В противном случае создает строку из значений в диапазоне [begin,end), как указано в таблице требований к последовательности (см.[sequence.reqmts]).

basic_string(initializer_list<charT> il, const Allocator& a = Allocator());

Effects: То же, что иbasic_­string(il.begin(), il.end(), a).

basic_string(const basic_string& str, const Allocator& alloc); basic_string(basic_string&& str, const Allocator& alloc);

Effects: Создает объект класса,basic_­string как указано в Табл61. Сохраненный распределитель построен из alloc. Во второй формеstr остается в допустимом состоянии с неопределенным значением.

Таблица61 - и эффектыbasic_­string(const basic_­string&, const Allocator&)
basic_­string(basic_­string&&, const Allocator&)
ЭлементЦенить
data() указывает на первый элемент выделенной копии массива, на первый элемент которого указывает исходное значениеstr.data().
size() первоначальная стоимостьstr.size()
capacity() значение, по крайней мере, такое большое, какsize()
get_­allocator() alloc

Throws: Вторая форма ничего не бросает, еслиalloc == str.get_­allocator().

template<class InputIterator, class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>> basic_string(InputIterator, InputIterator, Allocator = Allocator()) -> basic_string<typename iterator_traits<InputIterator>::value_type, char_traits<typename iterator_traits<InputIterator>::value_type>, Allocator>;

Remarks: Не должен участвовать в разрешении перегрузки, если InputIterator это тип, который не квалифицируется как итератор ввода, или еслиAllocator это тип, который не квалифицируется как распределитель ([container.requirements.general]).

basic_string& operator=(const basic_string& str);

Effects: Если *this иstr являются разными объектами, изменяется, *this как показано в Табл62.

Если *this иstr являются одним и тем же объектом, член не имеет никакого эффекта.

Returns: *this.

Таблица62 -operator=(const basic_­string&) эффекты
ЭлементЦенить
data() указывает на первый элемент выделенной копии массива, на первый элемент которого указываетstr.data()
size() str.size()
capacity() значение, по крайней мере, такое большое, какsize()

basic_string& operator=(basic_string&& str) noexcept(allocator_traits<Allocator>::propagate_on_container_move_assignment::value || allocator_traits<Allocator>::is_always_equal::value);

Effects: Перемещение присваивается как asequence container, за исключением того, что итераторы, указатели и ссылки могут быть недействительными.

Returns: *this.

basic_string& operator=(basic_string_view<charT, traits> sv);

Effects: Эквивалентен:return assign(sv);

basic_string& operator=(const charT* s);

Returns: *this = basic_­string(s).

Remarks: Использует traits​::​length().

basic_string& operator=(charT c);

Returns: *this = basic_­string(1, c).

basic_string& operator=(initializer_list<charT> il);

Effects: Как будто по:*this = basic_­string(il);

Returns:*this.