thể trùng lặp:
Aliasing `T*` with `char*` is allowed. Is it also allowed the other way around?Đây có phải là sử dụng std :: mảng undefined hành vi?
Tôi đang sử dụng một std::array
của char
s để giữ một giá trị kiểu nguyên thủy chưa biết, đó là dài không quá 10 byte, như vậy:
std::array<char, 10> val;
*reinterpret_cast<double*>(val.data()) = 6.3;
//blah blah blah...
double stuff = *reinterpret_cast<double*>(val.data());
Tôi đã đọc rằng truyền qua lại qua char *
không phải là u xác định, bởi vì trình biên dịch giả định char *
có thể bí danh một giá trị của bất kỳ loại nào. Điều này vẫn làm việc khi giá trị được đặt trong (những gì tôi giả định là) một mảng của char
s bên trong đối tượng? Lưu ý: Tôi biết rằng tôi có thể sử dụng một liên minh ở đây, nhưng điều đó sẽ dẫn đến một số lượng lớn mã soạn sẵn cho những gì tôi đang làm và tôi muốn tránh nó nếu cần thiết, do đó, câu hỏi này là cần thiết.
Câu hỏi khác nhau, cùng một câu trả lời. – Dan
Cùng một câu hỏi, các từ khác nhau. ; -] – ildjarn