`std :: alignment_of` против` alignof`

Я только что наткнулся на std::alignment_of тип черта, и его скоро стать другом std::alignment_of_v, Похоже, они были специально разработаны, чтобы быть эквивалентными простому призыву к alignof, и будущее добавление _v Помощник указывает, что это не просто бит наследства.

Какая польза от std::alignment_of (_v), когда мы имеем alignof ?

9

Решение

Они почти полностью излишни. Как отметил @Revolver, они были представлены в разных статьях, и alignment_of происходит от boost почти дословно.

Но это не значит, что эта черта бесполезна.

template<class...>class могут быть переданы другим templateи используется с метапрограммированием. Операторы как alignof не может: вы должны написать template<class>class alignment_of прежде чем вы могли бы передать его в средства метапрограммирования.

Теперь то же самое можно сказать о sizeof нуждающийся в std::size_of<class> шаблон.

Добавление _v потому что они подметали каждый ::value integral_constantшаблон в std и добавил _v переменный шаблон. Подумайте, какие из них достойны, а какие нет, а рисовать на велосипедах и почти бессмысленно: легче сделать все, чем тратить усилия на подбор достойных. Это делается не является доказательством того, что функция не устарела.

8

Другие решения

std::alignment_of вводится как порт библиотеки признаков типа Boost. Это предшествует C ++ 11 и alignof ключевое слово. Эта черта была заменена alignof оператор, но он был сохранен в основном для совместимости (так что вы можете просто заменить boost:: с std::) а также _v переменный псевдоним введен для согласованности с другими частями библиотеки.

4

По вопросам рекламы [email protected]