首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >测试aligned_storage的大小

测试aligned_storage的大小
EN

Stack Overflow用户
提问于 2013-09-30 21:16:40
回答 1查看 333关注 0票数 0

为了测试特定类型是否适合aligned_storage,我创建了以下测试结构:

代码语言:javascript
复制
template< typename T, std::size_t Bytes >
struct fits_in_storage : public std::integral_constant<bool, sizeof(std::aligned_storage<Bytes>::type) >= sizeof(std::aligned_storage<sizeof(T)>::type)>
{};

现在我有点想知道这样的测试是否会出现在stdlib中。都不愿意重新发明轮子。

我使用它来检查头部定义的aligned_storage (大小为Bytes)是否可以采用内部数据类型,这只在实际的编译单元中可用。

EN

回答 1

Stack Overflow用户

发布于 2013-09-30 22:15:45

除非至少有Len字节,否则不能保证aligned_storage<Len, Align>::type的大小。有可能(但不太可能)较小的Len::type比较大的Len更大。

meta.trans.other状态,用于

aligned_storage<std::size_t Len, std::size_t Align =default-alignment>

对于大小不大于Len (3.9)的任何C++对象类型,默认对齐值应是最严格的对齐要求。成员类型类型应该是POD类型,适合用作任何对象的未初始化存储,该对象的大小最大为Len,对齐方式为Align的除数。

因此,任何小于或等于Len的对象都可以存储在aligned_storage<Len>::type中。因此,您的检查可以简化为:

代码语言:javascript
复制
template< typename T, std::size_t Bytes >
struct fits_in_storage
    : public std::integral_constant<bool, (Bytes >= sizeof(T))>
{};

当然,它可以简化为Bytes >= sizeof(T)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19095272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档