std::move and std::forward c++ In Hindi
सी++ प्रोग्रामिंग लैंग्वेज में std::move और std::forward फंक्शन, C++11 वर्जन में लांच किए गए दो इम्पोर्टेन्ट फंक्शन फीचर्स या वैल्युएबल सी++ प्रोग्राम यूटिलिटीज़ हैं। जहा std::move और std::forward दोनों rvalue रेफरेंस और मूव सिमेंटिक्स सी++ कांसेप्ट से अटैच्ड हैं. लेकिन सी++ मे std::move और std::forward दोनों फंक्शन मेथड का यूज़ और पर्पस अलग-अलग डिफाइन हैं।

std::move function concept in C++.
सी++ प्रोग्राम में std::move() फंक्शन मेथड का यूज़ किसी क्लास ऑब्जेक्ट को rvalue के रूप में ट्रीट करने में किया जाता है, जिससे उस क्लास प्रोग्राम के रिसोर्स को कॉपी करने के बदले आसानी से सोर्स लोकेशन से टारगेट लोकशन में इजीली मूव या ट्रांसफर किया जा सके।
Syntax of the std::move function.
std::move(object);
Example of the std::move function.
#include <iostream>
#include <utility>
using namespace std;
int main()
{
string message1 = “Vcanhelpsu Edtech Platform”;
string message2 = std::move(message1);
cout << message2 << endl;
return 0;
}
Its output.
Vcanhelpsu Edtech Platform
In this example.
string message2 = std::move(message1);
यहाँ इस एक्साम्प्ल में स्ट्रिंग के मूव कंस्ट्रक्टर मेथड को यूज़ करने की परमिशन प्रोवाइड करता है।
Key points about the std::move function.
- याद रहे, सी++ प्रोग्राम में std::move() फंक्शन रियल में अपने आप से कुछ भी मूव नहीं करता है।
- std::move() फंक्शन रियल क्लास डाटा ऑब्जेक्ट को कास्ट करता है, जो आपके एक एक्सप्रेशन को xvalue में कन्वर्ट करता है. जिससे की एक मूव कंस्ट्रक्टर या मूव असाइनमेंट ऑपरेटर सलेक्ट किया जा सके।
The std::move() function in a C++ program is better understood as follows.
std::move(object)
↓
“सी++ यूजर इस क्लास प्रोग्राम ऑब्जेक्ट को मूवेबल मानें”
↓
अब इस ऑब्जेक्ट पर मूव ऑपरेशन अप्लाई हो सकता है
What happens to the original object in C++?
std::move() फंक्शन अप्लाई ऑपरेशन के बाद.
string message1 = “Vcanhelpsu Edtech Platform”;
string message2 = std::move(message1);
यहाँ message1 एक वैलिड लेकिन अनस्पेसिफाइड प्रोग्राम स्टेट में है।
यहाँ आपको यह नहीं मान लेना चाहिए कि message1 अभी भी “Vcanhelpsu Edtech Platform” टेक्स्ट वैल्यू इनफार्मेशन है।
जैसाकि, सी++ यूजर एक वैलिड क्लास प्रोग्राम ऑब्जेक्ट के लिए अलाउड ऑपरेशन को सिक्योर अप्लाई कर सकते हैं. जैसे कि किसी वेरिएबल ऑब्जेक्ट को एक नई वैल्यू असाइन करना।
message1 = “Edtech”;
std::forward function concept in C++.
सी++ प्रोग्राम में std::forward() फंक्शन मेथड का यूज़ स्पेशली रूप से उन जेनेरिक क्लास फंक्शन और टेम्पलेट में किसी प्रोग्राम आर्गुमेंट की वैल्यू कैटेगरी को अवॉयड करने में किया जाता है।
std::forward in simple terms.
किसी सी++ प्रोग्राम में std::forward मेथड किसी प्रोग्राम आर्गुमेंट को lvalue या rvalue राइट वैल्यू के रूप में स्टेबल बने रहने देता है. जब तक प्रोग्राम में किसी अन्य फ़ंक्शन से उसे पास नहीं किया जाता है।
std::forward मेथड स्पेशली रूप से सी++ प्रोग्राम में परफेक्ट फॉरवर्डिंग के लिए एक एसेंशियल फीचर्स है।
Why is std::forward needed in a C++ program?
सी++ प्रोग्राम में यूजर इस कंडीशन को एक बार इमेजिन करें।
void task(int& p)
{
cout << “this is a lvalue expression”;
}
void task(int&& p)
{
cout << “this is a rvalue expression”;
}
Now here we create a class program template.
template <typename T>
void wrapper(T&& element)
{
task(element);
}
Here Suppose we use calling method.
int p = 7;
wrapper(p);
wrapper(14);
यहाँ इस एक्साम्प्ल में सी++ यूजर यह उम्मीद कर सकते हैं.
this is a lvalue expression
this is a rvalue expression
लेकिन इसमें std::forward फंक्शन मेथड के बिना, फ़ंक्शन के अंदर प्रोग्राम element को lvalue के रूप में ट्रीट किया जाता है. क्योंकि इसमें इसका एक नाम डिफाइन होता है।
इस वजह से, मौजूदा प्रोग्राम में दोनों कॉल को lvalue वर्शन में सलेक्ट कर सकते हैं।
Using the std::forward method in a C++ program.
इसमें हम इसको कुछ इस तरह से लिख सकते हैं.
template <typename T>
void wrapper(T&& element)
{
process(std::forward<T>(element));
}
अब यहाँ:
int p = 7;
wrapper(p);
wrapper(14);
Its output.
this is a lvalue expression
this is a rvalue expression
यहाँ इसमें std::forward<T>(element) ओरिजिनल प्रोग्राम वैल्यू कैटेगरी को सिक्योर के रूप में होल्ड करता है।
Main difference between std::move vs std::forward
| std::move function method | std::forward function method |
| std::move function used toConverts an expression to an rvalue/xvalue define in program | std::forward functionConditionally used to preserve the original value by its default category |
| std::move function used when you want to move any program data or value object | Where std::forward function mainly used in generic/template code |
| std::move function Does not preserve whether the original was lvalue expression | std::forward function Preserves lvalue/rvalue by its default nature |
| std::move function basic used when Common in move constructors and move assignment data element value expression | std::forward function basic used in Common in perfect program value data element forwarding method |
| std::move function Usually written as – std::move(p) | std::forward function Usually written as – std::forward<T>(p) |
Example of a simple std::move function method in a C++ program.
तो चलिए सी++ प्रोग्राम में हम एक बेसिक std::move फंक्शन मेथड का यूज़ करे.
string text1 = “Vcanhelpsu”;
string text2 = std::move(text1);
Here it means.
“सी++ प्रोग्राम में text1 स्ट्रिंग वेरिएबल को उसकी करंट स्टेट में यूज़ करना क्लोज कर चुका है. और इसमें आपको उसके रिसोर्स को मूव या ट्रांसफर करने की परमिशन प्रोवाइड की है।”
std::forward function method.
template <typename T>
void wrapper(T&& element)
{
process(std::forward<T>(element));
}
Here it means.
यहाँ इस एक्साम्प्ल में std::forward “वैल्यू को उसी वैल्यू कैटेगरी में आगे फॉरवर्ड करता है, जिसमें वह ओरिजिनली रूप से मिली थी।”
A perfect forwarding in a C++ program.
किसी सी++ प्रोग्राम में एक परफेक्ट प्रोग्राम डाटा वैल्यू आर्गुमेंट फॉरवर्डिंग का मतलब है किसी क्लास प्रोग्राम आर्गुमेंट को टेम्पलेट फंक्शन से पास करना, आपको यहाँ यह ध्यान में रखना होगा कि वह ओरिजिनली lvalue का एक्सप्रेशन था या rvalue का एक्सप्रेशन था।
A perfect forwarding follows this common pattern in C++.
template <typename T>
void wrapper(T&& element)
{
process(std::forward<T>(element));
}
यहां, इस एक्साम्प्ल में T&& ऐंपरसेंड एड्रेस ऑपरेटर को फॉरवर्डिंग रेफरेंस के रूप में जाना जाता है, जब इसमें से T को एक्सट्रेक्ट किया जाता है, और std::forward<T>() ओरिजिनल वैल्यू कैटेगरी को सेव करता है।
यह टेक्निक C++ स्टैंडर्ड लाइब्रेरी में बहुत अधिक यूज़ होती है, जिसमें std::make_unique और std::make_shared जैसे फंक्शन इन्क्लुड होते हैं।
An easy way to remember the std::move and std::forward functions in C++ programming.
std::move function method.
std::move(p)
↓
“यहाँ हम p वेरिएबल को एक मूवेबल ऑब्जेक्ट के रूप में ट्रीट करते है।”
std::forward function method.
std::forward<T>(p)
↓
“इसमें p वेरिएबल को ठीक उसी तरह आगे फॉरवर्ड करे, जैसे इसे स्टार्ट में सेंड किया गया था।”
std::move and std::forward functions in one line.
सी++ प्रोग्रामिंग में std::move फंक्शन मेथड का यूज़ किसी प्रोग्राम डिक्लेअर वेरिएबल वैल्यू को मूव करने में किया जाता है. इसी तरह std::forward फंक्शन मेथड का यूज़ प्रोग्राम ऑब्जेक्ट वैल्यू को फॉरवर्डिंग के दौरान वैल्यू कैटेगरी को अवॉयड करने किया जाता है।

