2016-05-02 2 views
7

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

Каково использование std::alignment_of (_v), если у нас есть alignof?

+0

Чтобы иметь истинную ошибку при использовании с выражением вместо использования * gnu-alignof-expression * :-). – Jarod42

ответ

6

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

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

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

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

...

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

+0

Полезность метафунта сама по себе не перешла мне в голову. Это очень хороший момент, спасибо! – Quentin

4

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

+0

От вашего ответа кажется, что они были введены отдельно, когда они не были (как с C++ 11). – edmz

+0

@black технически они были введены отдельно (в разных документах). Суть моего ответа состояла в том, что он был частью библиотеки pre-C++ 11 до включения в стандарт. –

+0

'alignment_of' был в TR1. –

Смежные вопросы