15

我刚刚偶然发现了std::alignment_of类型特征,以及它即将成为朋友std::alignment_of_v。它们似乎被专门设计为等同于对 的普通调用alignof,并且未来添加的_v助手表明它不仅仅是一个遗留位。

std::alignment_of当我们有( _v) 时,有什么用alignof

4

3 回答 3

17

它们几乎是完全多余的。正如@Revolver 所指出的,它们是在不同的论文中介绍的,并且几乎alignment_ofboost逐字记录的。

但这并不意味着该特质毫无用处。

Atemplate<class...>class可以传递给其他templates 并与元编程一起使用。像alignofcannot 这样的操作符:你必须先编写 ,template<class>class alignment_of然后才能将它传递给元编程工具。

现在同样sizeof需要一个std::size_of<class>模板。

...

的添加_v是因为他们将每个 ::value integral_constant-type模板都扫了进来std,并添加了一个_v变量模板。考虑哪些是值得的,哪些不是自行车棚的绘画,几乎毫无意义:做每一个比花精力挑选值得做的更容易。完成并不能证明该功能没有过时。

于 2016-05-02T13:38:58.610 回答
4

作为 Boost 类型特征库的std::alignment_of端口引入。它早于 C++11 和alignof关键字。该特征已被alignof运算符取代,但主要出于兼容性目的而保留(因此您可以替换boost::std::),并_v引入了变量别名以与库的其他部分保持一致。

于 2016-05-02T12:12:46.660 回答
1

我在实践中发现的一件好事是,alignof它对旧代码在语法上是无效的,而alignment_of它只是一个标准模板。alignment_of因此,您可以通过提供使用编译器接受的任何替代语法的实现来保持与旧编译器的兼容性,然后在任何地方使用它。

于 2021-03-05T23:53:32.030 回答