std::async
के लिए सीधे rvalue संदर्भ मानकों के साथ lambdas बंधन, std::async
compiles के माध्यम से एक लैम्ब्डा के लिए एक rvalue बंधन और अपेक्षा के अनुरूप निष्पादित करता है के बारे में इस comment से प्रेरित होकर: (live example (live example)अंतर जब लपेटकर rvalue संदर्भ लैम्ब्डा
auto lambda = [] (std::string&& message) {
std::cout << message << std::endl;
};
auto bound = std::bind(lambda, std::string{"hello world"}); // Compiler error
bound();
इसका कारण यह है है:)
auto lambda = [] (std::string&& message) {
std::cout << message << std::endl;
};
auto future = std::async(lambda, std::string{"hello world"});
future.get();
std::bind
का उपयोग करते हुए, हालांकि, एक संकलक त्रुटि से चलाता है std::bind
message
को एक lvalue के रूप में रखता है, ताकि जब यह लैम्ब्डा को पास कर लेता है, तो तर्क अब पैरामीटर से मेल नहीं खाता है।
मैं read कि std::async
आंतरिक std::bind
का उपयोग करता है, तो यह कैसे rvalue संदर्भ मानकों के साथ दूर प्राप्त करता है जब std::bind
नहीं करता है? क्या मानक का कोई विशेष हिस्सा है जिसके लिए इस व्यवहार की आवश्यकता है या यह संकलक पर निर्भर है?