2010-10-07 16 views
5

इस बारे में उलझन में सी ++ 03 मानक, §14.7.1p5 से कथन है:अंतर्निहित टेम्पलेट इन्स्टेन्शियशन

अधिभार संकल्प प्रक्रिया एक वर्ग टेम्पलेट परिभाषा instantiating बिना कॉल करने के लिए सही समारोह निर्धारित कर सकते हैं, तो , यह निर्दिष्ट नहीं है कि वास्तव में यह तात्कालिकता होती है। [उदाहरण:

template <class T> struct S { 
     operator int(); 
}; 

void f(int); 
void f(S<int>&); 
void f(S<float>); 

void g(S<int>& sr) { 
     f(sr);  // instantiation of S<int> allowed but not required 
        // instantiation of S<float> allowed but not required 
}; 

- अंत उदाहरण]

मैं इस बात को समझने में असमर्थ हूँ। क्या यह अपरिभाषित व्यवहार है?

मुझे एक और similar problem मिला, जिसे मैं समझ में नहीं आता। वहां यह समझाया गया है कि सही व्यवहार अपरिभाषित है, लेकिन इसका क्या अर्थ है?

यहाँ

: MSVC: Implicit Template Instantiation, though templated constructor not used

उत्तर

0

अधिभार संकल्प के दौरान यह निर्धारित किया जाता है कि सही समारोह कॉल करने के लिए जब आप लिखते हैं f(sr) स्पष्ट रूप से वर्ग टेम्पलेट S की परिभाषा instantiating बिना void f(S<int>&); है, यह है कि क्या अपने वर्ग वास्तव में instantiated है अनिर्दिष्ट है।

अपरिभाषित व्यवहार और अनिर्दिष्ट व्यवहार दो पूरी तरह से अलग चीजें हैं। एस < पूर्णांक> की

इन्स्टेन्शियशन अनुमति, लेकिन आवश्यक नहीं

उदाहरण के लिए:

template <class T =int> 
struct S 
{ 
    operator int(); 
}; 

अनुमति दी है, लेकिन आवश्यक नहीं।

3

अनिर्दिष्ट मतलब यह है कि

  1. यह संकलक है कि क्या यह वास्तव में टेम्प्लेटेड वर्ग या नहीं और
  2. संकलक डिजाइनरों का दृष्टांत होगा पर निर्भर है कुछ रणनीति को चुना है चाहिए ऐसी परिस्थितियों से निपटने के लिए और
  3. कंपाइलर डिज़ाइनर को उनके choise को दस्तावेज करने की आवश्यकता नहीं है।

वैसे भी इस अपरिभाषित व्यवहार जो गलत व्यवहार के विपरीत सही व्यवहार है। विस्तृत स्पष्टीकरण के लिए this related question देखें।

+0

हालांकि [सी ++ परिभाषाएं] (http://stackoverflow.com/q/2047172/54262) सी से अधिक की मदद कर सकती है, क्योंकि जाहिर है कि उसके पास सी ++ मानक की एक प्रति है। –

+0

मुझे अपरिभाषित/अनिर्दिष्ट/कार्यान्वयन-परिभाषित व्यवहार चेतावनियां पता हैं .. लेकिन मुझे इस कार्यक्रम के बारे में स्पष्टीकरण की आवश्यकता है .. –

संबंधित मुद्दे