Namespaces
Variants

std:: is_sufficiently_aligned

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
Определено в заголовочном файле <memory>
template < std:: size_t N, class T >
bool is_sufficiently_aligned ( T * ptr ) ;
(начиная с C++26)

Проверяет, указывает ли указатель ptr на объект, выравнивание которого имеет значение не менее N .

Поведение не определено, если ptr не указывает на объект типа T (игнорируя cv-квалификаторы на каждом уровне).

Содержание

Возвращаемое значение

true если ptr указывает на объект с выравниванием не менее N ; иначе false .

Исключения

Ничего не выбрасывает.

Примечания

std::is_sufficiently_aligned может использоваться в качестве предусловия для std::assume_aligned .

Макрос тестирования возможностей Значение Стандарт Функция
__cpp_lib_is_sufficiently_aligned 202411L (C++26) std::is_sufficiently_aligned

Возможная реализация

template<std::size_t N, class T>
bool is_sufficiently_aligned(T* ptr)
{
    return std::bit_cast<std::uintptr_t>(ptr) % N == 0;
}

Пример

Смотрите также

alignof (C++11) запрашивает требования к выравниванию типа
(оператор)
alignas (C++11) указывает, что память для переменной должна быть выровнена на определенное значение
(спецификатор)
(since C++11) (deprecated in C++23)
определяет тип, подходящий для использования в качестве неинициализированного хранилища для типов заданного размера
(шаблон класса)
(C++11)
выравнивает указатель в буфере
(функция)
тип для выровненного доступа к элементам mdspan
(шаблон класса)