C++11 में T&& (डबल एम्परसेंड) का क्या मतलब है?
नमस्ते! मैंने C++11 सीखना शुरू किया है और कोड में नई नोटेशन `T&&` देखी है। मैं समझता हूँ कि `&` एक reference है, और `&&` logical AND है। लेकिन types के संदर्भ में यह कुछ और है।
उदाहरण के लिए, मैंने यह कोड देखा:
```cpp
template
void foo(T&& arg) {
// कुछ करते हैं
}
```
और यह भी:
```cpp
void bar(std::vector&& vec) {
// ...
}
```
पहले मैंने सोचा कि `T&&` एक "reference to reference" है, जो बेमानी लगता है। फिर पढ़ा कि इसे "rvalue reference" कहते हैं। लेकिन मुझे समझ नहीं आ रहा कि इसकी ज़रूरत क्यों है। `T&` और `T&&` में क्या अंतर है? मुझे `T&` या `const T&` के बजाय `T&&` कब उपयोग करना चाहिए? और "perfect forwarding" क्या है, जिसके बारे में सब बात कर रहे हैं?
कृपया सरल उदाहरणों से समझाएँ। मुझे लगता है कि मैं आधुनिक C++ में कुछ महत्वपूर्ण चीज़ छोड़ रहा हूँ।
<<>>
संक्षिप्त उत्तर: Rvalue references और move semantics
C++11 में T&& एक rvalue reference (temporary object का reference) है। यह अनुमति देता है