गैर-फेंकने वाले स्वैप मुहावरे को लागू करते समय, क्या मुझे throw()
का उपयोग करना चाहिए?क्या मुझे गैर-फेंकने वाले स्वैप को लागू करते समय फेंक() का उपयोग करना चाहिए?
namespace A
{
struct B
{
void swap(B& other) throw()
{ /* fancy stuff that doesn't throw */ }
};
void swap(B& lhs, B& rhs) throw()
{ lhs.swap(rhs); }
}
namespace std
{
template<>
void swap(A::B& lhs, A::B& rhs) throw()
{ lhs.swap(rhs); }
}
विशेष रूप से मैं std::swap
की विशेषज्ञता पर throw()
विनिर्देश लगाने के बारे में चिंता।
बोनस प्रश्न:
क्या सी ++ 0x के noexcept
कीवर्ड का उपयोग करते समय उत्तर अलग है?
आप उन तीन स्वैप घोषणाओं को एक से नीचे सरल बना सकते हैं: 'संरचना बी {मित्र शून्य स्वैप (बीएंडए, बीएंड बी) {/ * ...* /}}; ', तो बस उपयोगकर्ताओं को swd :: swap का उपयोग करके स्वैप का उपयोग करने की आवश्यकता होती है; स्वैप (ए, बी); 'जो एडीएल के माध्यम से आपके स्वैप में खींचता है (या वे बूस्ट :: स्वैप का उपयोग कर सकते हैं, जो पहले से ही यह करता है)। विशेष रूप से, यह std :: स्वैप पर अपवाद विनिर्देश के बारे में चिंता को रोकता है, यदि आप अपने स्वैप के लिए एक का उपयोग करने का निर्णय लेते हैं। –