2011-09-19 20 views
7

GoogleTechTalks video on Youtube में, बजेर्ने स्ट्राउस्ट्रप आने वाले सी ++ 0x मानक के बारे में बात करता है।क्या सी ++ 'स्पष्ट' कीवर्ड के उपयोग का यह उदाहरण सही है?

#include <iostream> 

struct Sick 
{ 
    Sick(double d)  { std::cout << d << "\n"; } 
    explicit Sick(int i) { std::cout << i << "\n"; } 
}; 


int main() 
{ 
    Sick s1 = 2.1; 
    Sick s2(2.1); 
} 

वह Sick(double) बजाय Sick(int) से पहले explicit कीवर्ड जगह क्रम कुछ संदर्भों में निहित रूपांतरण से जुड़ी समस्याओं को उजागर करने में, आपका मतलब है: वीडियो में उन्होंने निम्न उदाहरण का उल्लेख है?

+3

हमें कैसे पता होना चाहिए कि यूट्यूब वीडियो में से कोई क्या मतलब है? महत्वपूर्ण बात यह है कि * आप * इस उदाहरण में 'स्पष्ट' के उपयोग को समझते हैं। उदाहरण के साथ आप जो दिखाना चाहते हैं उसके आधार पर –

+2

या तो उचित होगा। – Flexo

+3

@ केरेक एसबी, आपको लगता है कि उसका क्या मतलब है क्योंकि वह इसका अर्थ समझने की कोशिश कर रहा है। – ikegami

उत्तर

9

उसकी चर्चा में, Stroustrup कहा गया है कि एक सीधा आरंभीकरण, इस तरह के रूप

Sick s2(2.1); 

विचार करेंगे केवल कंस्ट्रक्टर्स चिह्नित explicit अगर कोई explicit निर्माता ये हैं। यह कई कंपाइलरों (जीसीसी 4.6.1 और एमएसवीसी 16/वीएस 2010 समेत) के साथ मेरा अनुभव नहीं है, और मुझे मानक में ऐसी आवश्यकता नहीं मिल रही है (हालांकि मुझे कोई दिलचस्पी होगी यदि कोई इसे इंगित कर सकता है)।

हालांकि, ints initializers में इस्तेमाल कर रहे हैं, मुझे लगता है कि उदाहरण दिखाते थे क्या Stroustrup प्रदर्शित करने के लिए मतलब:

#include <iostream> 

struct Sick 
{ 
    Sick(double d)  { std::cout << "double " << d << "\n"; } 
    explicit Sick(int i) { std::cout << "int " << i << "\n"; } 
}; 


int main() 
{ 
    Sick s1 = 2; 
    Sick s2(2); 
} 

ऊपर इच्छा प्रदर्शन चल रहा है:

double 2 
int 2 

शो है कि दो जाहिर है समकक्ष प्रारंभिक वास्तव में विभिन्न रचनाकारों का चयन करें।

(या प्रश्न में उल्लिखित ट्रंचियन के रूप में - और मुझे याद आया - explicit कीवर्ड Sick(double d) कन्स्ट्रक्टर पर होना चाहिए)।

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

  • कोई संबंधित समस्या नहीं^_^