कुछ मामलों में, जैसे कि एक वर्णित है, सी ++ मानक कंपाइलरों को उस प्रक्रिया का निर्माण करने की अनुमति देता है, जो उनके ग्राहकों को सबसे अधिक उपयोगी लगेगी, उस व्यवहार की भविष्यवाणी किए बिना। दूसरे शब्दों में, ऐसे निर्माण "अपरिभाषित व्यवहार" का आह्वान करते हैं। हालांकि, इसका मतलब यह नहीं है कि इस तरह के निर्माण को "मना" किया जाता है क्योंकि C ++ मानक स्पष्ट रूप से अधिकार क्षेत्र को माफ करता है कि गठित कार्यक्रमों को क्या करने की अनुमति है। हालांकि मैं C ++ मानक के लिए किसी भी प्रकाशित किए गए राशन दस्तावेज़ से अनजान हूं, लेकिन यह तथ्य यह है कि यह C89 की तरह अपरिभाषित व्यवहार का वर्णन करता है, जिसका अर्थ होगा कि इसका अर्थ समान है: "अपरिभाषित व्यवहार कार्यान्वयनकर्ता को कुछ विशिष्ट त्रुटियों को पकड़ने के लिए लाइसेंस नहीं देता है जो कठिन हैं। जाँच द्वारा पता करना।
ऐसी कई स्थितियाँ हैं जहाँ किसी चीज़ को संसाधित करने का सबसे कुशल तरीका एक संरचना के कुछ हिस्सों को लिखना होगा जिसमें डाउनस्ट्रीम कोड के बारे में ध्यान रखना होगा, जबकि उन डाउन-कोड के बारे में परवाह नहीं करना है। आवश्यक है कि कार्यक्रम एक संरचना के सभी सदस्यों को आरम्भिक कर दें, जिनमें यह भी शामिल है कि जिनके बारे में कभी भी ध्यान नहीं दिया जाएगा, वे अनावश्यक रूप से दक्षता को बाधित करेंगे।
इसके अलावा, कुछ परिस्थितियां ऐसी हैं जहां गैर-नियतात्मक फैशन में गैर-व्यवस्थित डेटा व्यवहार करना सबसे अधिक कुशल हो सकता है। उदाहरण के लिए, दिया गया:
struct q { unsigned char dat[256]; } x,y;
void test(unsigned char *arr, int n)
{
q temp;
for (int i=0; i<n; i++)
temp.dat[arr[i]] = i;
x=temp;
y=temp;
}
यदि डाउनस्ट्रीम कोड किसी ऐसे तत्व के मूल्यों की परवाह नहीं करेगा x.dat
या y.dat
जिसके सूचकांक में सूचीबद्ध नहीं थे arr
, तो कोड को इसके लिए अनुकूलित किया जा सकता है:
void test(unsigned char *arr, int n)
{
q temp;
for (int i=0; i<n; i++)
{
int it = arr[i];
x.dat[index] = i;
y.dat[index] = i;
}
}
दक्षता में यह सुधार तब संभव नहीं होगा जब प्रोग्रामर को temp.dat
कॉपी करने से पहले उन डाउनस्ट्रीम सहित हर तत्व को स्पष्ट रूप से लिखना आवश्यक नहीं होगा।
दूसरी ओर, कुछ एप्लिकेशन हैं जहां डेटा रिसाव की संभावना से बचना महत्वपूर्ण है। ऐसे अनुप्रयोगों में, या तो कोड का एक संस्करण उपयोगी हो सकता है, जो कि बिना डाउनस्ट्रीम कोड को देखे, या बिना कार्यान्वयन गारंटी के किसी भी भंडारण के लिए उपयोगी हो सकता है, इस संबंध में बिना किसी अनैतिक भंडारण को कॉपी करने के किसी भी प्रयास को फंसाने का साधन है। जिनकी सामग्री लीक हो सकती है, उन्हें शून्य या अन्यथा गैर-गोपनीय डेटा के साथ अधिलेखित कर दिया जाएगा।
मैं जो बता सकता हूं, उसमें से C ++ मानक यह कहने का कोई प्रयास नहीं करता है कि इनमें से कोई भी व्यवहार अनिवार्य रूप से दूसरे की तुलना में अधिक उपयोगी है ताकि इसे अनिवार्य ठहराया जा सके। विडंबना यह है कि विनिर्देशन की इस कमी का उद्देश्य अनुकूलन की सुविधा प्रदान करना हो सकता है, लेकिन यदि प्रोग्रामर किसी भी तरह की कमजोर व्यवहार संबंधी गारंटी का फायदा नहीं उठा सकते हैं, तो किसी भी अनुकूलन को नकार दिया जाएगा।