2014-12-11 7 views
6

मैं कुछ कोड है जो अनिवार्य रूप निम्नलिखित करने पर निर्भर करता है? मुझे संदेह है कि ऐसा हो सकता है क्योंकि f से bar पास करते समय मैं अनियंत्रित double की मान प्रतिलिपि ले रहा हूं। उस ने कहा, मैं पास double का उपयोग नहीं कर रहा हूं हालांकि if ब्लॉक नहीं चलाया जाएगा।एक फ़ंक्शन पैरामीटर सूची में एक अनियंत्रित चर गुजर रहा है अच्छी तरह से परिभाषित?</p> <pre><code>void bar(bool b, double f) { if (b){ double g = f; } } void foo() { double f; bool b = false; bar(b, f); } </code></pre> <p>वहाँ किसी भी अपरिभाषित व्यवहार यहाँ है:

इसके अलावा, सब कुछ ठीक है अगर मैं संदर्भ द्वारा double पारित करने के लिए थे होगा:

void bar(bool b, double& f) 

तो मैं एक uninitialised चर नहीं "का उपयोग" कर रहा हूँ, लेकिन बस में यह जिक्र कर रहा हूँ।

+5

जब तक आप चर का उपयोग करने का प्रयास नहीं करते हैं, तब तक आपके पास अपरिभाषित व्यवहार नहीं होता है, और जब से इसे फ़ंक्शन के मान से गुजरते समय किया जाता है तो आपने कॉल में अपरिभाषित व्यवहार किया है। यदि आप इसके बजाय संदर्भ से गुजरते हैं, तो जब आप संदर्भ के मान तक पहुंचते हैं तो आपके पास फ़ंक्शन में अपरिभाषित व्यवहार होता है। –

+0

"एक प्रारंभिक मान का उपयोग स्वयं ही अपरिभाषित व्यवहार नहीं है, लेकिन मूल्य केवल अनिश्चित है।" ([इस उत्तर से] (http://stackoverflow.com/a/11965368/96780)) –

+1

@ DanielDaranas * यदि lvalue स्वचालित संग्रहण अवधि का एक ऑब्जेक्ट निर्दिष्ट करता है जिसे रजिस्टर स्टोरेज क्लास के साथ घोषित किया जा सकता था (कभी नहीं था पता लिया गया), और वह वस्तु अनियमित है (प्रारंभकर्ता के साथ घोषित नहीं किया गया है और इसका उपयोग करने से पहले कोई असाइनमेंट नहीं किया गया है), ** व्यवहार अपरिभाषित है। *** और वह उत्तर सी बीटीडब्ल्यू का जिक्र कर रहा है। – 2501

उत्तर

9

हां, व्यवहार अपरिभाषित है। आप फ़ंक्शन पैरामीटर सूची में इसे पास करते समय अनियंत्रित double की मान प्रतिलिपि ले रहे हैं।

संदर्भ द्वारा उत्तीर्ण अच्छी तरह परिभाषित है क्योंकि आप जो भी कर रहे हैं वह double के संदर्भ में बाध्यकारी है। बेशक, उस संदर्भ को एक्सेस करने का व्यवहार अपरिभाषित होगा।

N4140:

[dcl.init]

12 ... एक अनिश्चित मूल्य एक मूल्यांकन द्वारा निर्मित है, तो व्यवहार निम्नलिखित मामलों को छोड़कर अपरिभाषित है:

(अप्रयुक्त संकीर्ण चरित्र प्रकार से संबंधित अप्रासंगिक पाठ छोड़ा गया)

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

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