Avatar ·

C++11 में फंक्शन से return होने पर move-सिमैंटिक्स क्यों नहीं होता? rvalue-रेफरेंस की समस्या

नमस्ते! मैंने C++11 और move-सिमैंटिक्स को समझना शुरू किया है, और मुझे एक समस्या आई है। मैंने एक सरल फंक्शन लिखा है जो एक vector बनाता है और उसे return करता है:\n\n```cpp\n#include \n#include \n\nstd::vector createVector() {\n std::vector v = {1, 2, 3, 4, 5};\n return v; // यहाँ move की उम्मीद है\n}\n\nint main() {\n std::vector result = createVector();\n std::cout << "Size: " << result.size() << std::endl;\n return 0;\n}\n```\n\nमैंने उम्मीद की थी कि return पर move-कंस्ट्रक्टर कॉल होगा ताकि कॉपी करने से बचा जा सके। लेकिन जब मैं rvalue-रेफरेंस और move-सिमैंटिक्स के बारे में पढ़ता हूँ, तो कई लोग कहते हैं कि कंपाइलर खुद तय करता है कि क्या करना है। मैंने स्पष्ट रूप से std::move का उपयोग करने की कोशिश की:\n\n```cpp\nreturn std::move(v);\n```\n\nलेकिन कुछ लोग कहते हैं कि इससे प्रदर्शन और भी खराब हो सकता है।