2012-08-09 5 views
6

यहाँ:'मान्य' std :: फ़ंक्शन क्या है?

http://en.cppreference.com/w/cpp/utility/functional/function

operator bool वर्णित है: "जांचता है कि क्या संग्रहीत प्रतिदेय वस्तु मान्य है"।

संभावित रूप से एक डिफ़ॉल्ट निर्मित std::function मान्य नहीं है लेकिन क्या यह एकमात्र मामला है?

इसके अलावा, यह कैसे जांचता है कि यह मान्य है या नहीं?

वह मामला है जहां operator()std::bad_function_call उठाता है ठीक उसी मामले में जहां ऑब्जेक्ट मान्य नहीं है?

उत्तर

7

यह खराब लिखा गया है, आपका भ्रम उचित है। "वैध" से उनका मतलब है "एक लक्ष्य है"।

एक std::function जब यह एक समारोह आवंटित किया गया है "एक लक्ष्य है":

std::function<void()> x; // no target 
std::function<void()> y = some_void_function; // has target 

x = some_other_void_function; // has target 
y = nullptr; // no target 

x = y; // no target 

वे होना चाहिए या तो परिभाषित "वैध" इससे पहले कि वे इसका इस्तेमाल किया, या बस आधिकारिक शब्दों के साथ अटक गया।

+0

ठीक है, इसलिए वैधता की जांच केवल प्रकार की जांच है और एक डिफ़ॉल्ट निर्मित 'std :: function' को कॉल करना ठीक है, जहां 'std :: bad_function_call' उठाया गया है, yup? – dpj

+0

@ user710408: मुझे नहीं पता कि "वैधता की जांच केवल प्रकार की जांच है" से आपका क्या मतलब है। वैधता (अब परिभाषा मानते हैं कि "एक लक्ष्य है") रन-टाइम पर निर्धारित किया जाता है, टाइप-चेकिंग संकलन-समय पर होती है। और खराब फ़ंक्शन कॉल होता है, फ़ंक्शन वैध नहीं होता है (कोई लक्ष्य नहीं है), चाहे वह डिफ़ॉल्ट निर्माण से हो या स्पष्ट रूप से 'nullptr' असाइन किया जा सके। – GManNickG

+0

मुझे नहीं लगता कि मुझे पता था कि मेरा मतलब क्या था! धन्यवाद :) – dpj

1

भाषा मानक कहते हैं

explicit operator bool() const noexcept;

रिटर्न: अगर सही है * इस लक्ष्य है, अन्यथा गलत।

मतलब है कि function पर कॉल करने के लिए कुछ भी है। डिफ़ॉल्ट निर्मित function स्पष्ट रूप से नहीं है।