21 Language support library [language.support]

21.2 Common definitions [support.types]

21.2.1 Header <cstddef> synopsis [cstddef.syn]

namespace std {
  using ptrdiff_­t = see below;
  using size_­t = see below;
  using max_­align_­t = see below;
  using nullptr_­t = decltype(nullptr);

  enum class byte : unsigned char {};

  // [support.types.byteops], byte type operations
  template <class IntType>
    constexpr byte& operator<<=(byte& b, IntType shift) noexcept;
  template <class IntType>
    constexpr byte operator<<(byte b, IntType shift) noexcept;
  template <class IntType>
    constexpr byte& operator>>=(byte& b, IntType shift) noexcept;
  template <class IntType>
    constexpr byte operator>>(byte b, IntType shift) noexcept;
  constexpr byte& operator|=(byte& l, byte r) noexcept;
  constexpr byte operator|(byte l, byte r) noexcept;
  constexpr byte& operator&=(byte& l, byte r) noexcept;
  constexpr byte operator&(byte l, byte r) noexcept;
  constexpr byte& operator^=(byte& l, byte r) noexcept;
  constexpr byte operator^(byte l, byte r) noexcept;
  constexpr byte operator~(byte b) noexcept;
  template <class IntType>
    constexpr IntType to_integer(byte b) noexcept;
}

#define NULL see below
#define offsetof(P, D) see below

Содержимое и значение заголовка<cstddef> такие же, как и у заголовка стандартной библиотеки C<stddef.h>, за исключением того, что он не объявляет типwchar_­t, он также объявляет типbyte и связанные с ним операции ([support.types.byteops]), и, как указано в [support.types.nullptr] и [support.types.layout].

См. Также: ISO C 7.19

21.2.2 Header <cstdlib> synopsis [cstdlib.syn]

namespace std {
  using size_t = see below;
  using div_t = see below;
  using ldiv_t = see below;
  using lldiv_t = see below;
}

#define NULL see below
#define EXIT_FAILURE see below
#define EXIT_SUCCESS see below
#define RAND_MAX see below
#define MB_CUR_MAX see below

namespace std {
  // Exposition-only function type aliases
  extern "C" using c-atexit-handler = void();                        // exposition only
  extern "C++" using atexit-handler = void();                        // exposition only
  extern "C" using c-compare-pred = int(const void*, const void*);   // exposition only
  extern "C++" using compare-pred = int(const void*, const void*);   // exposition only

  // [support.start.term], start and termination
  [[noreturn]] void abort() noexcept;
  int atexit(c-atexit-handler* func) noexcept;
  int atexit(atexit-handler* func) noexcept;
  int at_quick_exit(c-atexit-handler* func) noexcept;
  int at_quick_exit(atexit-handler* func) noexcept;
  [[noreturn]] void exit(int status);
  [[noreturn]] void _Exit(int status) noexcept;
  [[noreturn]] void quick_exit(int status) noexcept;

  char* getenv(const char* name);
  int system(const char* string);

  // [c.malloc], C library memory allocation
  void* aligned_alloc(size_t alignment, size_t size);
  void* calloc(size_t nmemb, size_t size);
  void free(void* ptr);
  void* malloc(size_t size);
  void* realloc(void* ptr, size_t size);

  double atof(const char* nptr);
  int atoi(const char* nptr);
  long int atol(const char* nptr);
  long long int atoll(const char* nptr);
  double strtod(const char* nptr, char** endptr);
  float strtof(const char* nptr, char** endptr);
  long double strtold(const char* nptr, char** endptr);
  long int strtol(const char* nptr, char** endptr, int base);
  long long int strtoll(const char* nptr, char** endptr, int base);
  unsigned long int strtoul(const char* nptr, char** endptr, int base);
  unsigned long long int strtoull(const char* nptr, char** endptr, int base);

  // [c.mb.wcs], multibyte / wide string and character conversion functions
  int mblen(const char* s, size_t n);
  int mbtowc(wchar_t* pwc, const char* s, size_t n);
  int wctomb(char* s, wchar_t wchar);
  size_t mbstowcs(wchar_t* pwcs, const char* s, size_t n);
  size_t wcstombs(char* s, const wchar_t* pwcs, size_t n);

  // [alg.c.library], C standard library algorithms
  void* bsearch(const void* key, const void* base, size_t nmemb, size_t size,
                c-compare-pred* compar);
  void* bsearch(const void* key, const void* base, size_t nmemb, size_t size,
                compare-pred* compar);
  void qsort(void* base, size_t nmemb, size_t size, c-compare-pred* compar);
  void qsort(void* base, size_t nmemb, size_t size, compare-pred* compar);

  // [c.math.rand], low-quality random number generation
  int rand();
  void srand(unsigned int seed);

  // [c.math.abs], absolute values
  int abs(int j);
  long int abs(long int j);
  long long int abs(long long int j);
  float abs(float j);
  double abs(double j);
  long double abs(long double j);

  long int labs(long int j);
  long long int llabs(long long int j);

  div_t div(int numer, int denom);
  ldiv_t div(long int numer, long int denom);             // see [library.c]
  lldiv_t div(long long int numer, long long int denom);  // see [library.c]
  ldiv_t ldiv(long int numer, long int denom);
  lldiv_t lldiv(long long int numer, long long int denom);
}

Содержание и значение заголовка<cstdlib> такие же , как стандартный заголовок библиотеки C<stdlib.h>, за исключением того, что он не объявить типwchar_­t, и за исключением того, как было отмечено в [support.types.nullptr], [support.types.layout], [support.start.term], [c.malloc], [c.mb.wcs], [alg.c.library], [c.math.rand], и [c.math.abs]. [ Note: Некоторые функции имеют дополнительные перегрузки в этом международном стандарте, но их поведение такое же, как и вC standard library. ]end note

См. Также: ISO C 7.22

21.2.3 Null pointers [support.types.nullptr]

Тип nullptr_­tявляется синонимом типаnullptr выражения и имеет характеристики, описанные в[basic.fundamental] и[conv.ptr]. [ Note: Хотяnullptrадрес не может быть взят, адрес другого nullptr_­t объекта, который является lvalue, может быть взят. ]end note

Макрос NULL представляет собой константу нулевого указателя, определяемую реализацией.186

Возможные определения включают 0 и 0L, но не (void*)0.

21.2.4 Sizes, alignments, and offsets [support.types.layout]

Макрос offsetof(type, member-designator) имеет ту же семантику, что и соответствующий макрос в заголовке стандартной библиотеки C<stddef.h>, но принимает ограниченный наборtype аргументов в этом международном стандарте. Условно поддерживается использованиеoffsetof макроса сtype отличным от astandard-layout class.187 Выражениеoffsetof(type, member-designator) никогда не бывает,type-dependent и оно value-dependent тогда и только тогда, когдаtype является зависимым. Результат примененияoffsetof макроса к статическому элементу данных или члену функции не определен. Никакая операция, вызваннаяoffsetof макросом, неnoexcept(offsetof(type, member-designator)) должна вызывать исключение true.

Типptrdiff_­t представляет собой определяемый реализацией целочисленный тип со знаком, который может содержать разницу двух нижних индексов в объекте массива, как описано в[expr.add].

Типsize_­t представляет собой определяемый реализацией целочисленный тип без знака, который достаточно велик, чтобы содержать размер в байтах любого объекта.

[ Note: Рекомендуется, чтобы реализации выбирали типы дляptrdiff_­t иsize_­t , целое числоconversion ranks которых не больше, чем у, signed long int если только больший размер не требуется для хранения всех возможных значений. ]end note

Тип max_­align_­t представляет собой POD-тип, требования к выравниванию которого не менее велики, чем требования любого скалярного типа, и чьи требования к выравниванию поддерживаются в каждом контексте.

Смотрите также:Alignment,Sizeof,Additive operators,Free store, и ISO C 7,19.

Обратите внимание, чтоoffsetof требуется для работы, как указано, даже если унарный operator& перегружен для любого из задействованных типов.

21.2.5 byte type operations [support.types.byteops]

template <class IntType> constexpr byte& operator<<=(byte& b, IntType shift) noexcept;

Remarks: Эта функция не будет участвовать в разрешении перегрузки , если is_­integral_­v<IntType> неtrue.

Effects: Эквивалентен: return b = byte(static_­cast<unsigned char>(b) << shift);

template <class IntType> constexpr byte operator<<(byte b, IntType shift) noexcept;

Remarks: Эта функция не будет участвовать в разрешении перегрузки , если is_­integral_­v<IntType> неtrue.

Effects: Эквивалентен: return byte(static_­cast<unsigned char>(b) << shift);

template <class IntType> constexpr byte& operator>>=(byte& b, IntType shift) noexcept;

Remarks: Эта функция не будет участвовать в разрешении перегрузки , если is_­integral_­v<IntType> неtrue.

Effects: Эквивалентен: return b = byte(static_­cast<unsigned char>(b) >> shift);

template <class IntType> constexpr byte operator>>(byte b, IntType shift) noexcept;

Remarks: Эта функция не будет участвовать в разрешении перегрузки , если is_­integral_­v<IntType> неtrue.

Effects: Эквивалентен: return byte(static_­cast<unsigned char>(b) >> shift);

constexpr byte& operator|=(byte& l, byte r) noexcept;

Effects: Эквивалентен:

return l = byte(static_cast<unsigned char>(l) | static_cast<unsigned char>(r));

constexpr byte operator|(byte l, byte r) noexcept;

Effects: Эквивалентен:

return byte(static_cast<unsigned char>(l) | static_cast<unsigned char>(r));

constexpr byte& operator&=(byte& l, byte r) noexcept;

Effects: Эквивалентен:

return l = byte(static_cast<unsigned char>(l) & static_cast<unsigned char>(r));

constexpr byte operator&(byte l, byte r) noexcept;

Effects: Эквивалентен:

return byte(static_cast<unsigned char>(l) & static_cast<unsigned char>(r));

constexpr byte& operator^=(byte& l, byte r) noexcept;

Effects: Эквивалентен:

return l = byte(static_cast<unsigned char>(l) ^ static_cast<unsigned char>(r));

constexpr byte operator^(byte l, byte r) noexcept;

Effects: Эквивалентен:

return byte(static_cast<unsigned char>(l) ^ static_cast<unsigned char>(r));

constexpr byte operator~(byte b) noexcept;

Effects: Эквивалентен:return byte(~static_­cast<unsigned char>(b));

template <class IntType> constexpr IntType to_integer(byte b) noexcept;

Remarks: Эта функция не будет участвовать в разрешении перегрузки , если is_­integral_­v<IntType> неtrue.

Effects: Эквивалентен:return IntType(b);