2012-12-08 16 views
10

std::tie संदर्भ उपस्थित टपल देता है, तो आप निम्न कर सकते हैं:कितना अपवाद सुरक्षित है std :: टाई?

int foo, bar, baz; 
std::tie(foo, bar, baz) = std::make_tuple(1, 2, 3); 

यह अजगर में foo, bar, baz = (1, 2, 3) के समान है।

यदि कोई असाइनमेंट फेंकता है, तो निम्न उदाहरण में क्या होता है?

int foo = 1337; 
struct Bar { 
    Bar& operator=(Bar) { throw std::exception{}; } 
} bar; 
try { 
    std::tie(foo, bar) = std::make_tuple(42, Bar{}); 
} catch (std::exception const&) { 
    std::cout << foo << '\n'; 
} 

क्या यह 1337 या 42 प्रिंट करेगा, या यह निर्दिष्ट नहीं है?

+1

चूंकि 'tuple' का लेआउट निर्दिष्ट नहीं है, इसलिए मुझे लगता है कि यहां उत्तर भी" निर्दिष्ट नहीं है "। –

उत्तर

5

स्टैंडर्ड टपल काम कला की बात करते हैं §20.4.2.2 [tuple.assign], अपवाद के ही उल्लेख नहीं है कि काम जब तक करने के लिए सौंपा तत्वों में से एक फेंकता फेंक नहीं करना चाहिए।

चूंकि तत्वों को निर्दिष्ट करने के क्रम में कोई उल्लेख नहीं है, इसलिए निर्दिष्ट है।

+0

ज्यादातर मामलों के लिए मैं तर्क दूंगा कि बुनियादी अपवाद गारंटी तब तक प्रदान की जाती है जब तक कि शामिल प्रकार बुनियादी अपवाद या बेहतर प्रदान करते हैं। इसके अलावा जाहिर है कि अगर आप सबकुछ नहीं है तो आपको सूचित करें - यह निर्दिष्ट है। –

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