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()到处插入。
当我运行它时它似乎有效,但我不确定这是否真的保存。