1) इस परिणाम अनिर्दिष्ट है।
2) यह परिणाम अनिर्दिष्ट है। *
3) हां।
मानक में प्रासंगिक अनुभाग §5.9/2 है। संकेत p
और q
के बीच संबंधपरक तुलना केवल निर्दिष्ट कर रहे हैं जब:
p
और एक ही सरणी के अंत पिछले एक करने के लिए एक ही वस्तु या समारोह, बात करने के लिए q
बिंदु, या दोनों अशक्त हैं। इस मामले में, p <= q
और p >= q
सत्य हैं, और p < q
और p > q
झूठे हैं।
p
और q
उसी ऑब्जेक्ट के नॉनस्टैटिक डेटा सदस्यों को इंगित करता है, बाद में घोषित सदस्य के सूचक अधिक से अधिक की तुलना करते हैं। (ध्यान दें, यह तुलना एक्सेस विनिर्देशकों के बीच नहीं हो सकती है।)
p
और q
एक ही सरणी के भीतर तत्वों या सरणी के अंत से पहले तत्वों को इंगित करता है, उच्च सबस्क्रिप्ट वाले तत्व के पॉइंटर या अंत में एक के लिए सरणी अधिक तुलना करता है।
p
और q
उसी यूनियन ऑब्जेक्ट के डेटा सदस्यों को इंगित करता है, इस मामले में वे बराबर तुलना करते हैं।
अन्य सभी मामलों में, परिणाम निर्दिष्ट नहीं है।
* क्योंकि वे स्थैतिक हैं, वे (स्पष्ट रूप से) "nonstatic सदस्य" नियम नहीं प्राप्त करते हैं। उन्हें कुछ अनुवाद इकाई में परिभाषित किया जाएगा, और इसलिए किसी भी अन्य सूचक की तरह ही हैं। (अनिर्दिष्ट।)
नोट! एक तरह से कुल आदेश प्राप्त करने के लिए नहीं है, और कहा कि std::less<void*>
के माध्यम से है
यह §20.3.3/8 में है (और अन्य सभी तुलनात्मक समारोह वस्तुओं।):
टेम्पलेट्स greater
, less
के लिए , greater_equal
, और less_equal
, सूचक प्रकार के लिए विशेषज्ञता कुल ऑर्डर उत्पन्न करती है, भले ही अंतर्निहित ऑपरेटरों <
, >
, <=
, >=
नहीं।
इसलिए जब आप अगर std::less<void*>(&gFirst, &gSecond)
true
या false
है पता नहीं है, आप की गारंटी है:
std::less<void*>(&gFirst, &gSecond) ==
std::greater<void*>(&gSecond, &gFirst);
std::less<void*>(&Data::First, &Data::Second) ==
std::greater<void*>(&Data::Second, &Data::First);
कौन सा उपयोगी साबित हो सकते हैं।
1) मुझे लगता है कि एक स्रोत फ़ाइल के अंदर प्रारंभ करने का क्रम गारंटी है। एकाधिक सोर्सफाइल का प्रारंभिक क्रम अपरिभाषित है। –
मैं यह मानने के लिए प्रश्न 2 के साथ मैला था कि आप उसी क्रम में किसी अन्य फ़ाइल में डेटा को प्रारंभ भी करेंगे क्योंकि चर यहां घोषित किए गए हैं। मेरी गलती। यह 2. मामला वास्तव में वह है जिसे मैं सबसे ज्यादा रूचि रखता हूं। – zeroes00