क्या std :: numeric_limits पर संख्यात्मक सीमा मैक्रोज़ (उदा। INT64_MAX) का उपयोग करने के लिए कोई तर्क है? जो मैं समझता हूं उससे numeric_limits मानक में है लेकिन मैक्रोज़ केवल C99 में हैं इसलिए इसलिए गैर मानक।INT_ [MIN | MAX] मैक्रोज़ बनाम numeric_limits <T>
उत्तर
यदि सी ++, numeric_limits
का उपयोग करें, तो अंत में।
संपादित करें: ठीक है, जेम्स द्वारा टिप्पणी के अनुसार, "अंत" नहीं। - अपवाद टेम्पलेट्स और केस लेबल्स हैं। लेकिन, मैं या तो न्यूनतम या अधिकतम, या उनके लिए टेम्पलेट के लिए केस लेबल रखने के लिए उपयोग नहीं देख सकता, लेकिन मुझे लगता है कि मैंने सभी संभावनाएं नहीं देखी हैं ...
मुझे लगता है कि मेरा बिंदु यह है कि numeric_limits
टेम्पलेट max()
और min()
...
कुछ संदर्भों में (जैसे case
लेबल, गैर प्रकार टेम्पलेट पैरामीटर) एक अंकीय निरंतर उम्मीद है परे और अधिक उपयोगी है, और numeric_limits
इस का समर्थन नहीं करता: numeric_limits<int>::max()
एक निरंतर नहीं है। case
लेबल में, आपको इसके बजाय INT_MAX
का उपयोग करना होगा।
यह बहुत परेशान है लेकिन मुझे लगता है कि सी ++ 11 इसे ठीक करेगा।
पूर्व सी ++ 0x, निश्चित रूप से। INT_MIN
और INT_MAX
अभिन्न निरंतर अभिव्यक्ति हैं; numeric_limits<int>::min()
और numeric_limits<int>::max()
नहीं हैं। <climits>
मानक सी ++ है, और जब तक आप टेम्पलेट्स से निपट नहीं रहे हैं (जहां आप नहीं जानते कि यह int
या long
है), अत्यधिक जटिल समाधान से परेशान करने का वास्तव में कोई कारण नहीं है। (इसके अलावा: यदि आप टेम्पलेट्स लिख रहे हैं, भूल जाते हैं नहीं है कि numeric_limits<int>::min()
और numeric_limits<double>::min()
पूरी तरह से अलग विशेषताओं का प्रतिनिधित्व करते हैं, यदि आप कम से कम संभव मूल्य चाहते हैं, आप numeric_limits<T>::is_integer ? numeric_limits<T>::min() : -numeric_limits<T>::max()
आवश्यकता होगी।)
मैं जोड़ता हूं कि अभिन्न निरंतर अभिव्यक्ति तर्क केवल गणना करता है, यदि आप टेम्पलेट्स में मानों का उपयोग करना चाहते हैं। – Xeo
@Xeo: यह सच नहीं है। यह भी महत्वपूर्ण है जब आप कक्षा स्थिर शुरू कर रहे हैं। – MSalters
@MSalters,?आप बिना अभिन्न निरंतर एक अभिन्न कक्षा स्थैतिक प्रारंभ नहीं कर सकते? – Nim
अन्य उत्तर ज्यादातर सही जानकारी नहीं है, लेकिन ऐसा लगता है कि इसे सी ++ 11 के लिए अद्यतन करने की आवश्यकता है।
सी ++ 11, std::numeric_limits<T>::min()
, std::numeric_limits<T>::max()
में, और std::numeric_limits<T>::lowest()
सब की घोषणा की जाती constexpr
, तो वे INT_MIN
और कंपनी के रूप में ही संदर्भों में से अधिकांश में प्रयोग करने योग्य हो सकता है। एकमात्र अपवाद जिसे मैं सोच सकता हूं संकलन-समय स्ट्रिंग प्रसंस्करण #
स्ट्रिंगफिकेशन टोकन का उपयोग कर रहा है।
इसका मतलब है कि numeric_limits
मामला लेबल, टेम्पलेट मानकों, आदि के लिए इस्तेमाल किया जा सकता है, और आप सामान्य कोड में इसका उपयोग करने का लाभ मिलेगा (template<typename T> get_min(T t);
में INT_MIN
बनाम LONG_MIN
आज़मा कर देखें)।
सी ++ 11 std::numeric_limits<T>::lowest()
जोड़कर, इस मुद्दे का समाधान भी लाता है, जो कि std::numeric_limits<T>::lowest()
जोड़कर बातचीत करता है, जो पूर्णांक प्रकारों के लिए सबसे कम मूल्य और फ़्लोटिंग के लिए सबसे कम सकारात्मक मूल्य के बजाय सभी प्रकार के लिए सबसे सीमित मूल्य प्रदान करता है। बिंदु प्रकार।
- 1. MIN/MAX बनाम ऑर्डर द्वारा और LIMIT
- 2. निरंतर अभिव्यक्तियों में numeric_limits :: max() का उपयोग
- 3. numeric_limits <T> :: min() की असंगत परिभाषा को कैसे कार्य करें?
- 4. numeric_limits
- 5. एसक्यूएल क्यों चुनें COUNT (*), MIN (col), MAX (col) तेज़ है तो चयन करें MIN (col), MAX (col)
- 6. आईओएस: कोर डेटा में @min और @max का उपयोग करना
- 7. std: numeric_limits <double> :: ईपीएसलॉन परिभाषा
- 8. लिस्प: मैक्रोज़ बनाम कार्य
- 9. रैकेट बनाम योजना मैक्रोज़
- 10. इनलाइन फ़ंक्शंस बनाम प्रीप्रोसेसर मैक्रोज़
- 11. संख्यात्मक_limits क्यों है <int> :: अधिकतम()> numeric_limits <int> :: अनंतता()?
- 12. NumPy प्रकार: int_, float_, आदि
- 13. चेतावनी C4003 और त्रुटियों C2589 और C2059 पर: x = std :: numeric_limits <int> :: अधिकतम();
- 14. 'SELECT MIN (जोनमिन), MAX से ज़ोन (जोनमिन) LINQ से SQLQ के रूप में
- 15. MAX (आईडी), MIN (आईडी) MYSQL क्वेरी से अधिक जानकारी प्राप्त करें?
- 16. मैक्रोज़ में मैक्रोज़
- 17. ईजेएस: <% = बनाम <% -
- 18. मैक्रोज़
- 19. मैक्रोज़
- 20. मैक्रोज़
- 21. मैक्रोज़
- 22. मैक्रोज़
- 23. मैक्रोज़
- 24. jquery-min संस्करण?
- 25. <%# %> बनाम <%= %>
- 26. एसक्यूएल 2008 - varchar (max) बनाम पाठ डेटा प्रकार
- 27. पीएचपी: <<< ob_start बनाम
- 28. कैसे खोजें {min, max} विजुअल स्टूडियो या एसएसएमएस में नियमित अभिव्यक्ति पैटर्न दोहराता है "ढूंढें और बदलें"?
- 29. <iostream> बनाम <iostream.h> बनाम "iostream.h"
- 30. एक्स-मैक्रोज़
इसे उस संदर्भ में आज़माएं जहां एक अभिन्न निरंतर अभिव्यक्ति की आवश्यकता है। एक टेम्पलेट को तत्काल, या एक मामले में सक्षम कहें। या छोटे प्रकार के लिए, सरणी आयाम के रूप में ('UCHAR_MAX + 1' अक्सर होता है)। –
@ जेम्स, हम्म .. ठीक है, मैं टेम्पलेट्स और केस लेबल्स के लिए संपादित करूंगा, सरणी आयामों के बारे में निश्चित नहीं है ... – Nim
महत्वपूर्ण नोट: चूंकि सी ++ 11 'std :: numeric_limits :: अधिकतम() 'है 'constexpr', तो, अपवाद अब पकड़ नहीं है। –
juanchopanza