2016-08-04 14 views
11

मैं अपने कोड में std::move का उपयोग करने का प्रयास कर रहा हूं, लेकिन संकलक (g ++ 4.4) जिसका उपयोग मैं कर रहा हूं, इसका समर्थन नहीं करता है। boost::move विकल्प std::move पूरी तरह से कर सकते हैं? धन्यवाद।बूस्ट लाइब्रेरी में std :: move के समकक्ष

+8

'जी ++ 4.4' बहुत पुराना है। नए संस्करण – alexeykuzmin0

उत्तर

11

std::move (और boost::move जब सी ++ 0x समर्थन सक्षम है) T& से T&& पर केवल एक कास्ट है। यह वास्तव में कुछ भी नहीं ले जाता है। इसका मतलब है कि विशिष्ट प्रकार के पॉइंटर T&& को कंपाइलर द्वारा समर्थित किया जाना चाहिए। जीसीसी संस्करण 4.3 के बाद से आर-वैल्यू संदर्भों का समर्थन करता है, इसलिए बूस्ट संस्करण ठीक होना चाहिए।

हालांकि, क्या कोई कारण है कि आप से std::move का उपयोग नहीं कर सकते हैं?

http://en.cppreference.com/w/cpp/utility/move

तुम बस आदेश सीमित C++ 11 समर्थन है कि जीसीसी 4.4 गुण को सक्षम करने में एक संकलक विकल्प के रूप में -std=c++0x निर्दिष्ट करने के लिए सुनिश्चित करने के लिए की जरूरत है।

+3

पर जाने पर विचार करें C++ 03 'boost :: move' में यह ** केवल एक कलाकार नहीं है **: यही कारण है कि यह वहां काम करता है। "बूस्ट.मोव मैक्रोज़ पर आधारित है जो सी ++ 0x कंपाइलर्स और सी ++ 03 कंपाइलर्स में इम्यूलेटेड रावल्यू रेफरेंस क्लासेस और कनवर्ज़न ऑपरेटर में सही रावल्यू संदर्भों में विस्तारित हैं।" [बूस्ट डॉक्स] देखें (http://www.boost.org/doc/libs/1_59_0_b1/doc/html/move/how_the_library_works.html) – nugae

+0

@nugae हाँ, आप बिल्कुल सही हैं। –

8

हाँ, यह कर सकते हैं

क्या Boost.Move है?

रैवल्यू संदर्भ एक प्रमुख सी ++ 0x सुविधा है, जो सी ++ मानों के लिए चाल semantics सक्षम बनाता है। हालांकि, हमें लेवल सेमेनाटिक्स का लाभ लेने के लिए सी ++ 0x कंपाइलर्स की आवश्यकता नहीं है। बूस्ट.मोव सी ++ 0 एक्स मूव सेमेन्टिक्स सी ++ 03 कंपाइलर्स में अनुकरण करता है और पोर्टेबल कोड लिखने की अनुमति देता है जो सी ++ 03 और सी ++ 0 एक्स कंपाइलर्स में काम करता है।

स्रोत: http://www.boost.org/doc/libs/1_59_0_b1/doc/html/move.html

संबंधित मुद्दे