2012-07-06 16 views
8

std के आक्रमणों को std:: के साथ योग्यता प्राप्त करने की आवश्यकता है?क्या स्टडी कन्स्ट्रक्टरों के आमंत्रण योग्य होने की आवश्यकता है?

class whatever : public std::runtime_error 
{ 
public: 
    explicit whatever(const std::string& what) : runtime_error(what) {} 
};           //^do I need std:: here? 

यह योग्यता के बिना मेरे संकलक पर काम करता है, लेकिन मुझे यकीन है कि चाहे वह व्यवहार मानक है नहीं कर रहा हूँ।

+1

असल में, आप पूछ रहे हैं कि क्या आप योग्यता के बिना आधार कक्षाओं का उल्लेख कर सकते हैं (जरूरी नहीं 'std')? –

उत्तर

7

नहीं, आप नहीं करते हैं। प्रारंभकर्ता सूची में नाम whatever वर्ग के दायरे में देखे जाते हैं। इस वर्ग के दायरे में बेस क्लास में घोषित नाम शामिल हैं और बेस क्लास (runtime_error) का नाम std::runtime_error के दायरे में डाला गया है (यह सभी वर्गों के लिए मानक व्यवहार है)।

ध्यान दें कि यदि आप नाम का नाम वास्तविक वर्ग नाम के लिए typedef है तो यह काम नहीं करता है। आप आसानी से लुप्त हो सकते हैं, उदाहरण के लिए, std::istream और दोस्तों। See here.

+1

"* इंजेक्शन-क्लास-नाम *" की परिभाषा के लिए सी ++ 2003, §9.2 देखें। –

+0

@ रोब: धन्यवाद, मेरे पास हाथ रखने का मेरा मानक नहीं है। : ओ –

1

प्रारंभकर्ता सूची में योग्यता की आवश्यकता नहीं है (ईमानदार होने के लिए मुझे नहीं पता कि योग्यता भी अनुमति है या नहीं), क्योंकि यह आधार है और कक्षा के माध्यम से लुकअप द्वारा पाया जाएगा।

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