2011-07-21 12 views
22
बिना समारोह के लिए स्पष्ट कीवर्ड

संभव डुप्लिकेट:
What does the explicit keyword in C++ mean?C++ तर्क

वहाँ एक समारोह है कि किसी भी तर्क नहीं ले करता है के लिए explicit कीवर्ड का उपयोग करने के लिए एक कारण है? क्या इसका कोई असर पड़ता है? क्योंकि मैं सिर्फ लाइन

explicit char_separator()

पेज दस्तावेज़ीकृत बढ़ावा के अंत :: char_separator ( http://www.boost.org/doc/libs/1_47_0/libs/tokenizer/char_separator.htm) के पास

में आए मैं सोच रहा हूँ, लेकिन यह किसी भी आगे वहाँ समझाया नहीं है।

+6

डुप्ली नहीं; यह प्रश्न 'स्पष्ट' कीवर्ड के एक बहुत ही विशिष्ट कोने मामले के बारे में है। –

+4

यह कोई फ़ंक्शन नहीं है, यह एक कन्स्ट्रक्टर है - http://stackoverflow.com/questions/121162/what-does-the-explicit-keyword-in-c-mean/121163#121163 – Skizz

+0

@larsmans को बिना देखने के बताना मुश्किल कुछ वास्तविक उदाहरण –

उत्तर

14

explanation of members पढ़ना:

explicit char_separator(const Char* dropped_delims, 
         const Char* kept_delims = "", 
         empty_token_policy empty_tokens = drop_empty_tokens) 
explicit char_separator() 

1 निर्माता के लिए explicit कीवर्ड char_separator प्रकार की वस्तुओं की स्पष्ट निर्माण की आवश्यकता है। What does the explicit keyword mean in C++? स्पष्ट कीवर्ड को बहुत अच्छी तरह से शामिल करता है।

दूसरे निर्माता के लिए explicit कीवर्ड एक शोर है और इसे अनदेखा किया जाता है।

संपादित

C++ मानक:

7.1.2 p6 बताता है:

स्पष्ट विनिर्देशक केवल एक वर्ग घोषणा भीतर कंस्ट्रक्टर्स की घोषणाओं में इस्तेमाल किया जाएगा; 12.3.1 देखें।

12.3.1 p2 बताता है:

एक स्पष्ट निर्माता सिर्फ गैर स्पष्ट कंस्ट्रक्टर्स की तरह वस्तुओं का निर्माण करती है, लेकिन इतना ही जहां सीधे-प्रारंभ वाक्य रचना (8.5) या जहां डाले (5.2 करता है। 9, 5.4) स्पष्ट रूप से उपयोग किया जाता है। एक डिफ़ॉल्ट कन्स्ट्रक्टर एक स्पष्ट निर्माता हो सकता है; ऐसा कन्स्ट्रक्टर डिफ़ॉल्ट-प्रारंभिकरण या मूल्य-प्रारंभिक (8.5) करने के लिए उपयोग किया जाएगा। [उदाहरण:

class Z { 
public: 
explicit Z(); 
explicit Z(int); 
// ... 
}; 
Z a;    // OK: default-initialization performed 
Z a1 = 1;   // error: no implicit conversion 
Z a3 = Z(1);  // OK: direct initialization syntax used 
Z a2(1);   // OK: direct initialization syntax used 
Z* p = new Z(1); // OK: direct initialization syntax used 
Z a4 = (Z)1;  // OK: explicit cast used 
Z a5 = static_cast<Z>(1); // OK: explicit cast used 

अंत उदाहरण]

तो, explicit कीवर्ड के साथ डिफ़ॉल्ट निर्माता इस कीवर्ड के बिना के समान है।