C++11 में T&& (डबल एम्परसेंड) का क्या अर्थ है?
नमस्ते सहकर्मियों! मैंने C++11 सीखना शुरू किया और फंक्शन पैरामीटर और टेम्पलेट घोषणाओं में अजीब सिंटैक्स — डबल एम्परसेंड `&&` देखा। उदाहरण के लिए, मैंने ऐसा कोड देखा:
```cpp
template
void foo(T&& arg) {
// कुछ कोड
}
```
या मूव-कंस्ट्रक्टर के कार्यान्वयन में:
```cpp
class MyClass {
public:
MyClass(MyClass&& other) noexcept;
};
```
मैं समझता हूँ कि एकल `&` एक reference (lvalue-reference) है। लेकिन डबल एम्परसेंड क्या करता है? इंटरनेट पर लिखा है कि यह "rvalue-reference" है, लेकिन मुझे स्पष्ट नहीं है कि यह सामान्य reference से कैसे अलग है और इसकी आवश्यकता क्यों है। ऐसा लगता है कि यह मूव सेमैंटिक्स (move semantics) और परफेक्ट फॉरवर्डिंग (perfect forwarding) से संबंधित है, लेकिन मैं पूरी तस्वीर नहीं बना पा रहा हूँ।
क्या आप सरल उदाहरणों के साथ समझा सकते हैं? विशेष रूप से मुझे इसमें रुचि है:
1. टेम्पलेट में `T&&` कैसे काम करता है — क्या यह हमेशा rvalue है या नहीं?
2. कभी-कभी क्यों कहा जाता है कि `T&&` lvalue और rvalue दोनों हो सकता है?
3. `std::move` और `std::forward` को `&&` के साथ कैसे उपयोग करें?
पहले से धन्यवाद!