मैंने कुछ कोड S s;
लिखा ... s = {};
, यह S s = {};
के समान होने की उम्मीद है। हालांकि यह नहीं था।ओवरलोड रिज़ॉल्यूशन: खाली ब्रेसिज़ का असाइनमेंट
#include <iostream>
struct S
{
S(): a(5) { }
S(int t): a(t) {}
S &operator=(int t) { a = t; return *this; }
S &operator=(S const &t) = default;
int a;
};
int main()
{
S s = {};
S t;
t = {};
std::cout << s.a << '\n';
std::cout << t.a << '\n';
}
उत्पादन होता है:
5
0
मेरे प्रश्न हैं:
- क्यों बदले "अस्पष्ट",
operator=(int)
यहाँ चयनित है या अन्य एक निम्न उदाहरण समस्या reproduces ? - क्या
S
को बदले बिना कोई साफ कामकाज है?
मेरा इरादा s = S{};
है। s = {};
लिखना सुविधाजनक होगा अगर यह काम करता है। मैं वर्तमान में s = decltype(s){};
का उपयोग कर रहा हूं हालांकि मैं प्रकार या चर नाम को दोहराने से बचाना पसंद करूंगा।
'{}' से 'int' पहचान रूपांतरण है ([\ [over.ics.list \]/9] (http://eel.is/c++draft/over.ics.list#9))। '{}' से 'एस' उपयोगकर्ता द्वारा परिभाषित रूपांतरण है ([\ [over.ics.list \]/6] (http://eel.is/c++draft/over.ics.list#6))। मैं कसम खाता हूं कि मैंने कल एक बहुत ही समान प्रश्न देखा ... –
@ टी.सी. यदि हां, तो मुझे लगता है कि कल मैं और सवाल पढ़कर खुद को कुछ विकास समय बचा सकता था! –
मुझे लगता है कि मेरे कोड में कई जगहें एक ही गलती हुई हैं ... उदा। मैं आमतौर पर 'शून्य स्पष्ट() {* यह = {} का उपयोग करता हूं; } 'किसी ऑब्जेक्ट को अपने मूल्य-प्रारंभिक स्थिति –