2012-04-10 9 views
9

In this document, लेखक ने कहागैर-पीओडी प्रकार को वैराडिक फ़ंक्शन में पास करना अपरिभाषित व्यवहार है?

केवल एक पॉड प्रकार अंडाकार के लिए एक तर्क हो सकता है "..." जबकि std :: स्ट्रिंग एक पॉड-प्रकार नहीं है।

मैं इसे Passing NON-POD type to Variadic function is undefined behavior के रूप में समझ रहा हूं। क्या यह सही है?
हालांकि, क्या वह सी/सी ++ मानक कह रहा है? मैंने इसे n3242 सी ++ spec पर खोजने की कोशिश की। लेकिन नहीं मिल सका।

मुझे पता है कि मैं सही समझ रहा हूं और यह एक मानक है।

उत्तर

8

यह सी ++ 11 5.2.2/7 में निर्दिष्ट है:

वर्ग प्रकार एक गैर तुच्छ प्रतिलिपि निर्माता होने का एक संभावित मूल्यांकन तर्क पासिंग, एक गैर तुच्छ चाल contructor, या एक गैर -विशिष्ट विनाशक, पैरामीटर के साथ, सशर्त रूप से कार्यान्वयन-परिभाषित अर्थशास्त्र के साथ समर्थित है।

तो यह प्रत्येक कंपाइलर पर निर्भर करता है कि इसका समर्थन करना है या नहीं; पोर्टेबल कोड किसी कार्यान्वयन परिभाषित व्यवहार पर भरोसा नहीं कर सकता है। पुराने मानकों में, यह बस अपरिभाषित था।

+0

तो यह ** कार्यान्वयन परिभाषित ** * नहीं * ** अनिर्धारित ** है। –

+7

@ एएलएस: यह सशर्त रूप से समर्थित है; एक कंपाइलर इसे अपरिभाषित छोड़ने का विकल्प चुन सकता है। तो यह परिभाषित नहीं है कि यह परिभाषित किया गया है या नहीं। –

+1

धन्यवाद, आप इसे इतनी तेजी से कैसे मिला, यद्यपि? मैं कोशिश नहीं कर सकता, हर बार मैंने कोशिश की। क्या आपके पास कुछ रहस्य है? – Benjamin

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