小编Til*_*nnZ的帖子

如何用 std::byte[] 替换aligned_storage<T[]>?

C++23 中已弃用的使用aligned_storage,建议用对齐方式替换std::byte[](请参阅此处)。我对此有两个问题:

1.如何对齐?

该文件建议更换

std::aligned_storage_t<sizeof(T), alignof(T)> t_buff;

alignas(T) std::byte t_buff[sizeof(T)]

然而,我实际上存储的是一个 T 数组(或者 T 是一个数组)。我可以简单地替换 std::aligned_storage_t<sizeof(T), alignof(T)> data_[SIZE];

alignas(alignof(T)*SIZE) std::byte data_[sizeof(T) * SIZE];

我认为这是错误的用法alignas吗?

2. 如何读/写?

我认为访问权限没有太大变化,因此阅读是否正确:

reference data(size_t index) noexcept {
    return *std::launder(reinterpret_cast<T*>(&data_[index*sizeof(T)]));
}
Run Code Online (Sandbox Code Playgroud)

并写与

new (reinterpret_cast<void*>(&data_[size_*sizeof(T)])) T{std::forward<Args>(args)...};

我为什么要问?

我的使用alignas似乎确实错误,我应该如何对齐它?我真的可以将访问索引与 相乘sizeof(T),还是需要考虑填充?如何?

另外,代码似乎比以前更糟糕,因为我必须sizeof()到处插入。

当我运行它时它似乎有效,但我不确定这是否真的保存。

我查看了其他示例(例如,此处此处和其他示例),但它们总是T以而不是T[]作为示例。

c++ alignas

5
推荐指数
1
解决办法
259
查看次数

标签 统计

alignas ×1

c++ ×1