मैं निर्माताओं के लिए मूल्य-प्रारंभ के साथ सदस्यों के लिए मूल्य-आरंभीकरण उपयोग करने का प्रयास (अगर मैं वास्तव में अच्छा शब्दों का प्रयोग मैं नहीं जानता ...)वर्दी और मूल्य-प्रारंभ
तो ... जब मैं निर्धारित करें:
struct A
{
int a_;
};
मैं उपयोग करने में सक्षम हूँ:
A a{5};
assert(m.a_==5);
हालांकि, अगर मैं सदस्य ब्रेस प्रारंभकर्ता और एक आरंभीकरण-सूची निर्माता का उपयोग करना चाहते
struct B
{
int b_ {1};
};
यह संकलन नहीं करता है (++ 14 c: http://ideone.com/MQ1FMU):
B b{2};
यहाँ त्रुटि है:
prog.cpp:19:7: error: no matching function for call to 'B::B(<brace-enclosed initializer list>)'
B b{2};
^
prog.cpp:19:7: note: candidates are:
prog.cpp:10:8: note: constexpr B::B()
struct B
^
prog.cpp:10:8: note: candidate expects 0 arguments, 1 provided
prog.cpp:10:8: note: constexpr B::B(const B&)
prog.cpp:10:8: note: no known conversion for argument 1 from 'int' to 'const B&'
prog.cpp:10:8: note: constexpr B::B(B&&)
prog.cpp:10:8: note: no known conversion for argument 1 from 'int' to 'B&&'
क्या है अंतर, अवधारणा के लिहाज से? बहुत धन्यवाद!
ठीक है मैंने सोचा था कि ऐसा इसलिए था क्योंकि 'बी' कुल नहीं था, लेकिन वास्तव में यह अपेक्षाओं को पूरा करता है जहां तक मैं कह सकता हूं। यह बस गैर-तुच्छ है। –
ध्यान दें कि Ideone.com पर "सी ++ 14" जी ++ - 4.9.2 है, जो सी ++ 14-अनुरूप नहीं है (जैसा कि इस संकलन त्रुटि से प्रमाणित है!) – Casey