首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"natural_alignment_of“type_trait?

"natural_alignment_of“type_trait?
EN

Stack Overflow用户
提问于 2013-12-06 18:32:54
回答 1查看 142关注 0票数 0

在C++11中,我们现在有了alignas关键字,它可以用来定义一个新类型,它只是一个现有的类型,但是使用更严格的对齐方式,例如typedef:

代码语言:javascript
复制
typedef char Maximally_Aligned_Char alignas( max_align_t );

在给定一个typename T的情况下,是否有一种以编程方式确定该类型的原始“自然”对齐方式?类似于以下将编译的概念性natural_alignment_of type_trait:

代码语言:javascript
复制
size_t natural_char_alignment = natural_alignment_of< Maximally_Aligned_Char >::value;
static_assert( natural_char_alignment == alignof( char ) );

背景

我正在编写模板代码来处理所有标量类型。一般来说,对于整数,( sizeof( T ) == alignof( T ) )是真的,但是有了官方的alignas支持,我想我不能再做这个假设了。

炒作

也许像std::decay这样的东西会起作用?测试代码时,我看到G++4.8警告“忽略模板参数上的属性”,这听起来很好,也很危险。

EN

回答 1

Stack Overflow用户

发布于 2013-12-06 18:54:37

我真的不明白你能用你的natural_alignment特性做些什么。

如果I定义了一个对齐率为16的类型,那么我希望该类型的所有实例都有16对齐。

既然您已经了解alignof,那么为什么不直接使用它呢?即使在理论上可以想象使用非幂的2对齐,但在实践中它将是极其脆弱的,所以你所要做的就是把std::max(sizeof(T), alignof(T))作为计算的基础,然后你就可以离开了。

注意:这可能意味着数据被压缩得不那么紧,填充也会被引入,但是你为什么要关心呢?您在用户的约束范围内尽了最大努力。

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

https://stackoverflow.com/questions/20431108

复制
相关文章

相似问题

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