`std::alignment_of` 与 `alignof`
`std::alignment_of` versus `alignof`
我刚刚偶然发现了 std::alignment_of
type trait, and its soon-to-be friend std::alignment_of_v
. They seem to have been specifically designed to be equivalent to a plain call to alignof
,未来添加的 _v
助手表明它不仅仅是一个遗留位。
当我们有 alignof
时,std::alignment_of
(_v
) 有什么用?
std::alignment_of
作为 Boost 类型特征库的端口引入。它早于 C++11 和 alignof
关键字。该特征已被 alignof
运算符取代,但主要出于兼容性目的而保留(因此您可以将 boost::
替换为 std::
)并引入 _v
变量别名以保持一致性与图书馆的其他部分。
它们几乎完全是多余的。正如@Revolver 指出的那样,它们是在不同的论文中介绍的,并且 alignment_of
几乎逐字地来自 boost
。
但这并不意味着该特质没有用。
A template<class...>class
可以传递给其他 template
并与元编程一起使用。 alignof
之类的运算符不能:您必须先编写 template<class>class alignment_of
才能将其传递给元编程工具。
现在 sizeof
需要一个 std::size_of<class>
模板也是如此。
...
加_v
是因为扫了每个::value
integral_constant
类型的模板在std
里面加了一个_v
变量模板。考虑哪些值得,哪些不值得,这将是自行车棚粉刷,几乎毫无意义:做每一个比花精力挑选值得做的要容易。它正在完成并不能证明该功能没有过时。
我在实践中发现的一件好事是 alignof
对于旧代码在语法上是无效的,而 alignment_of
只是一个标准模板。因此,您可以通过使用您的编译器接受的任何替代语法提供 alignment_of
的实现来保持与旧编译器的兼容性,然后在任何地方使用它。
我刚刚偶然发现了 std::alignment_of
type trait, and its soon-to-be friend std::alignment_of_v
. They seem to have been specifically designed to be equivalent to a plain call to alignof
,未来添加的 _v
助手表明它不仅仅是一个遗留位。
当我们有 alignof
时,std::alignment_of
(_v
) 有什么用?
std::alignment_of
作为 Boost 类型特征库的端口引入。它早于 C++11 和 alignof
关键字。该特征已被 alignof
运算符取代,但主要出于兼容性目的而保留(因此您可以将 boost::
替换为 std::
)并引入 _v
变量别名以保持一致性与图书馆的其他部分。
它们几乎完全是多余的。正如@Revolver 指出的那样,它们是在不同的论文中介绍的,并且 alignment_of
几乎逐字地来自 boost
。
但这并不意味着该特质没有用。
A template<class...>class
可以传递给其他 template
并与元编程一起使用。 alignof
之类的运算符不能:您必须先编写 template<class>class alignment_of
才能将其传递给元编程工具。
现在 sizeof
需要一个 std::size_of<class>
模板也是如此。
...
加_v
是因为扫了每个::value
integral_constant
类型的模板在std
里面加了一个_v
变量模板。考虑哪些值得,哪些不值得,这将是自行车棚粉刷,几乎毫无意义:做每一个比花精力挑选值得做的要容易。它正在完成并不能证明该功能没有过时。
我在实践中发现的一件好事是 alignof
对于旧代码在语法上是无效的,而 alignment_of
只是一个标准模板。因此,您可以通过使用您的编译器接受的任何替代语法提供 alignment_of
的实现来保持与旧编译器的兼容性,然后在任何地方使用它。