std::numeric_limits::max(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– std::numeric_limits::max(3) πŸ’–

okay so bestie, this page is from the C++ Standard Libary manual β€” yes, that’s literally the manual name and we’re keeping the spelling, it’s iconic πŸ’… β€” and it’s all about std::numeric_limits::max. no cap, that’s the whole main character here.


🌸 NAME 🌸

std::numeric_limits::max - std::numeric_limits::max

like… it’s giving β€œthe function is the page and the page is the function,” fr fr.


✨ Synopsis ✨

Defined in header <limits>:

static T max() throw();             (until C++11)
static constexpr T max() noexcept;  (since C++11)

Returns the maximum finite value representable by the numeric type T. Meaningful for all bounded types. lowkey that’s the whole vibe check: bounded types only, okay? 🫢


πŸŽ€ Return value πŸŽ€

Here’s the full mapping, bestie β€” left side is T, right side is what std::numeric_limits<T>::max() gives you:

  • T β€” std::numeric_limits<T>::max()
  • /* non-specialized */ β€” T()
  • bool β€” true
  • char β€” CHAR_MAX
  • signed char β€” SCHAR_MAX
  • unsigned char β€” UCHAR_MAX
  • wchar_t β€” WCHAR_MAX
  • char8_t (since C++20) β€” UCHAR_MAX
  • char16_t (since C++11) β€” UINT_LEAST16_MAX
  • char32_t (since C++11) β€” UINT_LEAST32_MAX
  • short β€” SHRT_MAX
  • unsigned short β€” USHRT_MAX
  • int β€” INT_MAX
  • unsigned int β€” UINT_MAX
  • long β€” LONG_MAX
  • unsigned long β€” ULONG_MAX
  • long long (since C++11) β€” LLONG_MAX
  • unsigned long long (since C++11) β€” ULLONG_MAX
  • float β€” FLT_MAX
  • double β€” DBL_MAX
  • long double β€” LDBL_MAX

no skipped rows, no β€œwhatever” energy β€” every single one is here πŸ’–


πŸ¦‹ Example πŸ¦‹

Demonstrates the use of max() with some fundamental types and some standard library typedefs (the output is system-specific):

// Run this code

#include <cstddef>
#include <iostream>
#include <limits>
#include <string_view>
#include <type_traits>

template<typename T>
void print_max_twice(std::string_view type)
{
    constexpr T max_value {std::numeric_limits<T>::max()};

    std::cout << type << ": ";
    if constexpr (std::is_floating_point_v<T>)
        std::cout << std::defaultfloat << max_value << " or "
                  << std::hexfloat << max_value << '\n';
    else
        std::cout << std::dec << static_cast<unsigned long long>(max_value) << " or "
                  << std::hex << static_cast<unsigned long long>(max_value) << '\n';
}

int main()
{
    std::cout << std::showbase;

    print_max_twice<bool>("bool");
    print_max_twice<short>("short");
    print_max_twice<int>("int");
    print_max_twice<std::streamsize>("streamsize");
    print_max_twice<std::size_t>("size_t");
    print_max_twice<char>("char");
    print_max_twice<char16_t>("char16_t");
    print_max_twice<wchar_t>("wchar_t");
    print_max_twice<float>("float");
    print_max_twice<double>("double");
    print_max_twice<long double>("long double");
}

🌈 Possible output 🌈

bool: 1 or 0x1
short: 32767 or 0x7fff
int: 2147483647 or 0x7fffffff
streamsize: 9223372036854775807 or 0x7fffffffffffffff
size_t: 18446744073709551615 or 0xffffffffffffffff
char: 127 or 0x7f
char16_t: 65535 or 0xffff
wchar_t: 2147483647 or 0x7fffffff
float: 3.40282e+38 or 0x1.fffffep+127
double: 1.79769e+308 or 0x1.fffffffffffffp+1023
long double: 1.18973e+4932 or 0xf.fffffffffffffffp+16380

it’s giving β€œnumbers but make it hexadecimal too,” and honestly? obsessed πŸ”₯


πŸ‘‘ See also πŸ‘‘

  • lowest β€” returns the lowest finite value of the given type; [static] (C++11) (public static member function)
  • min β€” returns the smallest finite value of the given type; [static] (public static member function)

signed off from source/version http://cppreference.com on 2024.06.10, for page std::numeric_limits::max(3) β€” okay bye bestie, go max out those bounded types πŸ’…βœ¨πŸŒˆ

πŸ“¦ where this page comes from