std::basic_string<CharT,Traits,Allocator>::max_size
Материал из cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev ">
</tbody><tbody>
</tbody>
size_type max_size() const; |
(до C++11) | |
size_type max_size() const noexcept; |
(начиная с C++11) (до C++20) |
|
constexpr size_type max_size() const noexcept; |
(начиная с C++20) | |
Возвращает максимальное количество элементов, которые может содержать строка из-за ограничений реализации системы или библиотеки, т.е. std::distance(begin(), end()) для самой большой строки.
Параметры
(нет)
Возвращаемое значение
Максимальное количество символов.
Сложность
Константная.
Пример
Запустить этот код
#include <array>
#include <climits>
#include <iomanip>
#include <iostream>
#include <locale>
#include <string>
#include <typeinfo>
#include <boost/core/demangle.hpp>
template<typename T>
void print_basic_string_max_size()
{
std::basic_string<T> s;
auto max_size = s.max_size();
std::cout.imbue(std::locale("en_US.UTF-8"));
std::cout << "basic_string<" << boost::core::demangle(typeid(T).name())
<< ">:\n\t" << max_size << " = ";
std::cout << std::setprecision(3) << (double) max_size << " = ";
std::cout.imbue(std::locale("C"));
std::cout << std::hex << std::setfill('0') << "0x"
<< std::setw(sizeof(typename decltype(s)::size_type) << 1)
<< max_size << '\n' << std::dec;
};
int main()
{
std::cout << "Размер указателя: " << CHAR_BIT * sizeof(void*) << " бит\n"
"Максимальные размеры:\n";
print_basic_string_max_size<char>();
print_basic_string_max_size<char16_t>();
print_basic_string_max_size<char32_t>();
print_basic_string_max_size<wchar_t>();
print_basic_string_max_size<long>();
using CharT = std::array<char, 01232>;
print_basic_string_max_size<CharT>();
}
Возможный вывод:
Размер указателя: 64 бит
Максимальные размеры:
basic_string<char>:
9,223,372,036,854,775,807 = 9.22e+18 = 0x7fffffffffffffff
basic_string<char16_t>:
4,611,686,018,427,387,903 = 4.61e+18 = 0x3fffffffffffffff
basic_string<char32_t>:
2,305,843,009,213,693,951 = 2.31e+18 = 0x1fffffffffffffff
basic_string<wchar_t>:
2,305,843,009,213,693,951 = 2.31e+18 = 0x1fffffffffffffff
basic_string<long>:
1,152,921,504,606,846,975 = 1.15e+18 = 0x0fffffffffffffff
basic_string<std::array<char, 666ul>>:
13,848,906,962,244,407 = 1.38e+16 = 0x00313381ec031337
Смотрите также
| возвращает количество символов (public функция-элемент) | |
(C++17) |
возвращает максимальное число символов (public функция-элемент std::basic_string_view<CharT,Traits>)
|