这段代码起作用。但是,如果我改用注释掉的版本,
using StorageType = alignas(alignof(T)) char[sizeof(T)];
我遇到错误。
template <typename T> struct minipool {
union minipool_item {
private:
//using StorageType = alignas(alignof(T)) char[sizeof(T)];
using StorageType = char[sizeof(T)];
// Points to the next freely available item.
minipool_item *next;
// Storage of the item. Note that this is a union
// so it is shared with the pointer "next" above.
StorageType datum;
....
};
};
正确的语法是什么?
答案 0 :(得分:1)
这是行不通的,因为在C ++中,没有机制可以采用现有类型(即char[sizeof(T)]
)并创建一个除了对齐方式之外完全相同的新类型。如果您将datum
声明为sizeof(T)
char
的数组,并与T
对齐,则datum
的类型为 still < / em> char[sizeof(T)]
。对齐规范可以附加到成员声明,但不能附加到类型。您不能先将对齐方式附加到该类型,然后再使用该结果来声明该成员,就像您尝试做的那样。
using StorageType = char[sizeof(T)];
alignas(T) StorageType datum;