gpt4 book ai didi

c++ - 静态字符数组的对齐保证

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:26 28 4
gpt4 key购买 nike

我想知道静态分配的 char 数组的对齐保证。查看其他 SO 问题,我发现了一些有关动态分配的 char 数组的问题。

对于静态分配的 char 数组,它们是否对齐以便我可以将新的任何类型放入其中(前提是它足够大)?还是这只适用于动态分配的?

char buff[sizeof(T)];
T * pT = (T*) buff;
new(pT) T(); // well defined?
...
pT->~T();

如果没有,我该如何解决这个问题?

最佳答案

在 C++11 中,正确的做法是这样的:

char alignas(T) buff[sizeof(T)]; //Notice 'alignas' as
T * pT = (T*) buff;
new(pT) T(); // well defined!

注意 alignas 的使用.

如果 T 是模板参数,那么最好使用 std::alignment_of类模板为:

char alignas(std::alignment_of<T>::value) buff[sizeof(T)]; 

另请注意 alignas 的参数可以是正整数值类型。所以这两个是等价的:

char alignas(T)          buff[sizeof(T)];
char alignas(alignof(T)) buff[sizeof(T)]; //same as above

第二个利用了alignof返回 std::size_t 类型的整数值。

关于c++ - 静态字符数组的对齐保证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11214632/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com