std::basic_string<CharT,Traits,Allocator>::max_size - cppreference.com (original) (raw)
#include #include #include #include #include #include #include #include <boost/core/demangle.hpp> template void print_basic_string_max_size() { std::basic_string 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 << "Pointer size: " << CHAR_BIT * sizeof(void*) << " bits\n" "Maximum sizes:\n"; print_basic_string_max_size(); print_basic_string_max_size(); print_basic_string_max_size(); print_basic_string_max_size(); print_basic_string_max_size(); using CharT = std::array<char, 01232>; print_basic_string_max_size(); }
Pointer size: 64 bits Maximum sizes: basic_string: 9,223,372,036,854,775,807 = 9.22e+18 = 0x7fffffffffffffff basic_string: 4,611,686,018,427,387,903 = 4.61e+18 = 0x3fffffffffffffff basic_string: 2,305,843,009,213,693,951 = 2.31e+18 = 0x1fffffffffffffff basic_string: 2,305,843,009,213,693,951 = 2.31e+18 = 0x1fffffffffffffff basic_string: 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