Tôi đang cố gắng để thực hiện sự liên kết 16-byte của mảng tĩnh đơn giản sử dụng std :: aligned_storage mẫu:Gắn mảng tĩnh nhờ sủ dụng std :: aligned_storage
#include <type_traits>
int main()
{
const size_t SIZE = 8;
using float_16 = std::aligned_storage<sizeof(float) * SIZE, 16>::type;
float_16 mas;
new(&mas) float[SIZE];//Placement new. Is this necessary?
mas[0]=1.f;//Compile error while attempting to set elements of aligned array
}
tôi nhận được biên dịch báo lỗi sau:
no match for «operator[]» in «mas[0]»
Sau đó, tôi đã cố gắng để sử dụng rõ ràng đúc con trỏ:
float* mas_ = reinterpret_cast<float*>(mas);
nhưng điều này cũng mang lại biên dịch báo lỗi:
invalid cast from type «float_16 {aka std::aligned_storage<32u, 16u>::type}» to type «float*»
Ai có thể gợi ý cho tôi cách sắp xếp mảng tĩnh nhờ sủ dụng std :: aligned_storage chính xác?
Tại sao bạn không sử dụng con trỏ được trả về bởi 'mới'? – avakar
@avakar con trỏ được trả về bởi 'new' không có liên kết mở rộng. –
@ R.MartinhoFernandes: Tôi nghĩ avakar nói về vị trí mới (được căn chỉnh). (xem câu trả lời của tôi) – Jarod42