2010-06-02 25 views

回答

30

取决于你想要的。值肯定不会被保留。如果您需要,请使用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

+11

评论必须至少包含15个字符,但这并不适用于答案?奇怪:) – fredoverflow 2010-06-02 15:46:38

+0

答案必须至少有15个字符:) – 2010-06-02 15:59:06

+2

@Daniel Daranas:哈哈!只是看到你的丑陋攻击“克服”了限制。聪明;) – ereOn 2010-06-02 16:07:26

3

的问题是,有没有保证,一个double的编译器的二进制表示是float的等效表示。为了对多字节类型使用memcpy,基础表示必须是相同的(相同的布局)。您可以安全复制floatfloat,intintdoubledouble

你注定为未定义行为当源类型不匹配目标类型,如复制从longcharfloatdoublememcpy函数不会进行任何转换或执行任何促销。它只是复制。

1

一般情况 - 没有。

在特定情况下,在给定的平台上,floatdouble的表示可能相同,并且副本将成功。但它无论如何都没有任何实际意义。