我偶然发现了std::alignment_of
类型特征及其即将成为朋友的std::alignment_of_v
。它们似乎是专门设计为等同于对alignof
的简单调用,而_v
助手的未来添加表明它不仅仅是遗留位。
当我们std::alignment_of
时,_v
(alignof
)有什么用?
答案 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
的实现,然后在任何地方使用它,从而与旧编译器保持兼容。