我刚刚偶然发现了std::alignment_of
类型特征,以及它即将成为朋友std::alignment_of_v
。它们似乎被专门设计为等同于对 的普通调用alignof
,并且未来添加的_v
助手表明它不仅仅是一个遗留位。
std::alignment_of
当我们有( _v
) 时,有什么用alignof
?
我刚刚偶然发现了std::alignment_of
类型特征,以及它即将成为朋友std::alignment_of_v
。它们似乎被专门设计为等同于对 的普通调用alignof
,并且未来添加的_v
助手表明它不仅仅是一个遗留位。
std::alignment_of
当我们有( _v
) 时,有什么用alignof
?
它们几乎是完全多余的。正如@Revolver 所指出的,它们是在不同的论文中介绍的,并且几乎alignment_of
是boost
逐字记录的。
但这并不意味着该特质毫无用处。
Atemplate<class...>class
可以传递给其他template
s 并与元编程一起使用。像alignof
cannot 这样的操作符:你必须先编写 ,template<class>class alignment_of
然后才能将它传递给元编程工具。
现在同样sizeof
需要一个std::size_of<class>
模板。
...
的添加_v
是因为他们将每个 ::value
integral_constant
-type模板都扫了进来std
,并添加了一个_v
变量模板。考虑哪些是值得的,哪些不是自行车棚的绘画,几乎毫无意义:做每一个比花精力挑选值得做的更容易。完成并不能证明该功能没有过时。
作为 Boost 类型特征库的std::alignment_of
端口引入。它早于 C++11 和alignof
关键字。该特征已被alignof
运算符取代,但主要出于兼容性目的而保留(因此您可以替换boost::
为std::
),并_v
引入了变量别名以与库的其他部分保持一致。
我在实践中发现的一件好事是,alignof
它对旧代码在语法上是无效的,而alignment_of
它只是一个标准模板。alignment_of
因此,您可以通过提供使用编译器接受的任何替代语法的实现来保持与旧编译器的兼容性,然后在任何地方使用它。