2010-06-02 8 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

+0

उत्तर कम से कम 15 वर्ण लंबा होना चाहिए :) –

+2

@ Daniel Daranas: हाहा! सीमा को "दूर करने" के लिए बस अपनी बदसूरत हैक देखा। चालाक;) – ereOn

3

समस्या कोई गारंटी नहीं कि संकलक के एक double की बाइनरी प्रतिनिधित्व एक float के बराबर प्रतिनिधित्व है है कि वहाँ है। मल्टी-बाइट प्रकारों के लिए memcpy का उपयोग करने के लिए अंतर्निहित प्रतिनिधित्व समान (समान लेआउट) होना चाहिए। आप float से float, int से int और double से double पर सुरक्षित रूप से प्रतिलिपि बना सकते हैं।

आप अपरिभाषित व्यवहार के लिए किस्मत में जब स्रोत प्रकार इस तरह के long से char या floatdouble करने के लिए नकल के रूप में, गंतव्य प्रकार से मेल नहीं खाता रहे हैं। memcpy फ़ंक्शन कोई रूपांतरण नहीं करता है या कोई भी प्रचार नहीं करता है। यह सिर्फ प्रतियां।

1

सामान्य मामले में - नहीं।

विशिष्ट मामलों में, दिए गए प्लेटफ़ॉर्म पर float और double का प्रतिनिधित्व समान हो सकता है, और प्रति सफल हो जाएगी। लेकिन यह वैसे भी कोई व्यावहारिक अर्थ नहीं बनाता है।