`std :: alignment_of`与`alignof`

时间:2016-05-02 12:02:12

标签: c++ memory-alignment c++17 alignof

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

当我们std::alignment_of时,_valignof)有什么用?

3 个答案:

答案 0 :(得分: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 - 类型模板并添加了function Controller($element) { var self = this; self.$postLink = $postLink; function $postLink() { $element.attr("mymymy", "xxxxxx"); } } 变量模板。考虑哪些哪些是值得的,哪些不是自行绘画和几乎毫无意义:每个人都比在花费精力去挑选有价值的人做更容易。它的完成并不能证明这个特征不会过时。

答案 1 :(得分:4)

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

答案 2 :(得分:0)

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