`std::alignment_of` versus `alignof`
`std::alignment_of` versus `alignof`
我刚刚偶然发现了std::alignment_of
类型的特征,它很快就会成为std::alignment_of_v
的朋友。它们似乎被专门设计为等效于对alignof
的普通调用,而_v
助手的未来添加表明它不仅仅是一个遗留位。
当我们有alignof
时,std::alignment_of
(_v
)有什么用?
它们几乎完全是多余的。正如@Revolver所指出的,它们在不同的论文中被介绍,alignment_of
几乎逐字逐句地来自boost
。
但这并不意味着这种特质毫无用处。
template<class...>class
可以传递给其他template
,并与元编程一起使用。像alignof
这样的运算符不能:必须先编写template<class>class alignment_of
,然后才能将其传递给元编程工具。
现在sizeof
需要std::size_of<class>
模板也是如此。
添加_v
是因为他们扫描了std
中每个::value
integral_constant
类型模板中的,并添加了一个_v
变量模板。考虑到哪些地方值得画,哪些地方不值得画,这几乎是毫无意义的:做每一件都比花精力挑选值得做的更容易。这并不能证明这一功能没有过时。
std::alignment_of
被引入作为Boost类型特征库的端口。它早于C++11和alignof
关键字。该特性已被alignof
运算符取代,但保留它主要是为了兼容性(因此您可以用std::
替换boost::
),并且引入了_v
变量别名以与库的其他部分保持一致。
我在实践中发现的一件好事是,alignof
在语法上对旧代码无效,而alignment_of
只是一个标准模板。因此,您可以通过使用编译器接受的任何替代语法提供alignment_of
的实现来与较旧的编译器保持兼容,然后在任何地方使用它。
- 在 __STDCPP_DEFAULT_NEW_ALIGNMENT__ 和 alignof(std::max_align_
- sizeof总是alignof的倍数吗
- 对于所有对象类型 T,大小(T) >= alignof(T) 是否总是如此?
- 如何使用alignof强制对齐堆分配
- GDI versus Direct2D
- "protected versus private"注意事项
- `std::alignment_of` versus `alignof`
- QGLShaderProgram::setAttributeArray(0, ...)VERSUS QGLShaderProgram::setAttributeArray( "position" ,
- C++ int versus long
- eventfd_read/write versus sem_wait/post
- Torque 3d versus Ogre 3d?
- C++ io streams versus mmap
- 内存对齐:如何使用alignof / alignas
- Java JAI BufferedImage versus C++ OpenCV Mat imread?
- alignof操作符的用途是什么?
- 基于alignof的标记指针专门化
- setData() versus insertRows() Qt ModelView
- Java Classes versus C++ Classes
- Unicode conversions - iconv_xxx versus mbstowcs/wcstombs
- Visual C++ versus QT Creator