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