संभव डुप्लिकेट:
Why is it an error to use an empty set of brackets to call a constructor with no arguments?कन्स्ट्रक्टर को क्यों नहीं कहा जाता है जब() का उपयोग ऑब्जेक्ट घोषित करने के लिए किया जाता है?
$ cat cons.cpp
#include <iostream>
class Matrix {
private:
int m_count;
public:
Matrix() {
m_count = 1;
std::cout << "yahoo!" << std::endl;
}
};
int main() {
std::cout << "before" << std::endl;
Matrix m1(); // <----
std::cout << "after" << std::endl;
}
$ g++ cons.cpp
$ ./a.out
before
after
$
वाक्य रचना Matrix m1();
क्या करता है?
मैं मानना था कि यह Matrix m1;
के समान है। जाहिर है मैं गलत हूँ।
@Lazer: अपने आप को समझाने के लिए, (उदाहरण के पहुँचने के m1.m_count के लिए) एम 1 ... – Francesco
उपयोग करने के लिए सी ++ 11 आप ब्रेसिज़ उपयोग कर सकते हैं की कोशिश सभी कन्स्ट्रक्टर कॉल के लिए यह C++ के सबसे परेशान पार्स यानी मैट्रिक्स एम 1 {} से बचाता है; – mark
यह "सबसे अप्रिय पार्स", सबसे अप्रिय पार्स है जब आप घोषित करने और वस्तु और एक मूल्य एक या यह की निर्माता मापदंडों के अधिक करने के लिए अस्थायी प्रारंभ पारित करने के लिए कोशिश नहीं है। जैसे 'ए बी (ए());'। 'मैट्रिक्स एम 1(); 'सिर्फ एक नियमित समारोह घोषणा है। –