अत्यधिक अस्पष्ट शीर्षक के लिए खेद है। (मेरे अंग्रेजी कौशल की कमी के कारण)। कृपया एक बेहतर शीर्षक का सुझाव दें।क्यों कॉपी कन्स्ट्रक्टर का आह्वान नहीं किया जाता है?
कृपया निम्नलिखित कोड पर विचार करें।
struct A {
typedef std::vector<double> State;
// template <class... Args>
// A(Args... args)
// : a(args...)
// {}
template <class... Args>
A(Args&&... args)
: a(std::forward<Args>(args)...)
{}
A(const A&) = default;
A(A&&) = default;
State a;
};
int main(){
A a(3,2);
A b = a; // This line triggers an error!!
}
जीसीसी 4.8.0 त्रुटि संदेश error: no matching function for call to 'std::vector<double>::vector(A&)' : a(std::forward<Args>(args)...)
साथ यह संकलन करने में विफल रहा है।
मुझे समझ में नहीं आता कि यह कोड गलत क्यों है। मेरी राय में, संकलक को A b = a;
लाइन में कॉपी कन्स्ट्रक्टर का आह्वान करना चाहिए।
हालांकि अगर मैं कन्स्ट्रक्टर को टिप्पणी के द्वारा प्रतिस्थापित करता हूं (जो केवल मूल्य लेता है)। यह संकलित करता है। इसके अलावा, अब डिफ़ॉल्ट प्रतिलिपि (और चाल) कन्स्ट्रक्टर के लिए लाइनों की आवश्यकता नहीं है। यहां क्या होता है?
ओह, मैं देखता हूं। स्पष्ट स्पष्टीकरण के लिए धन्यवाद। :) – Sungmin