Spec-Zone.ru › C++

std::is_sufficiently_aligned

Определён в заголовке <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) указывает, что хранилище для переменной должно быть выровнено на заданную величину
(спецификатор)
aligned_storage
(начиная с C++11)(устарело в C++23)
определяет тип, подходящий для использования в качестве неинициализированного хранилища для типов заданного размера
(шаблон класса)
align
(C++11)
выравнивает указатель в буфере
(функция)
aligned_accessor
(C++26)
тип для выровненного доступа к элементам mdspan
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/is_sufficiently_aligned

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API