2010-06-02 45 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的表示可能相同,並且副本將成功。但它無論如何都沒有任何實際意義。