2010-06-02 20 views

Trả lời

30

Phụ thuộc vào những gì bạn muốn. Các giá trị chắc chắn sẽ không được bảo tồn. Nếu bạn cần, hãy sử dụng std::copy.

#include <algorithm> 

int main() 
{ 
    double a[] = {1.618, 3.1416, 2.7, 0.707, 1.0}; 
    float b[5]; 
    std::copy(a, a + 5, b); 
} 
24

số

+11

Nhận xét phải dài ít nhất 15 ký tự, nhưng điều này không chứa câu trả lời? Strange :) – fredoverflow

+0

Các câu trả lời phải có ít nhất 15 ký tự, quá :) –

+2

@ Darrian Daranna: Haha! Chỉ cần nhìn thấy hack xấu xí của bạn để "vượt qua" giới hạn. Thông minh;) – ereOn

3

Vấn đề là không có đảm bảo rằng biểu diễn nhị phân của trình biên dịch của một double là đại diện tương đương với một float. Để sử dụng memcpy cho các loại nhiều byte là biểu diễn bên dưới phải giống nhau (cùng một bố cục). Bạn có thể sao chép an toàn float tới float, int tới intdouble đến double.

Bạn đang dành cho hành vi undefined khi loại nguồn không phù hợp với loại đích, chẳng hạn như sao chép từ long để char hoặc float để double. Hàm memcpy không thực hiện bất kỳ chuyển đổi nào hoặc thực hiện bất kỳ chương trình khuyến mãi nào. Nó chỉ là bản sao.

1

Trong trường hợp chung - không.

Trong trường hợp cụ thể, trên một nền tảng nhất định, đại diện của floatdouble có thể giống nhau và bản sao sẽ thành công. Nhưng nó không có ý nghĩa thiết thực nào.

Các vấn đề liên quan