Bjarne Stroustrup से C ++ 0x पूछे जाने वाले प्रश्न :
__cplusplus
C ++ 0x में मैक्रो __cplusplus
को ऐसे मान पर सेट किया जाएगा जो वर्तमान से अलग (से अधिक है) 199711L
।
हालांकि यह उतना उपयोगी नहीं है जितना कोई चाहेगा। gcc
(स्पष्ट रूप से लगभग 10 वर्षों के लिए) यह मान निर्धारित किया गया था 1
, एक प्रमुख संकलक को सत्तारूढ़ करने के लिए , जब तक कि यह तय नहीं किया गया था जब gcc 4.7.0 निकला था ।
ये C ++ मानक हैं और आप किस मूल्य में उम्मीद कर सकते हैं __cplusplus
:
- सी ++ प्री-सी ++ 98:
__cplusplus
है 1
।
- C ++ 98:
__cplusplus
है 199711L
।
- C ++ 98 + TR1: यह C ++ 98 के रूप में पढ़ता है और यह जांचने का कोई तरीका नहीं है कि मुझे पता है।
- C ++ 11:
__cplusplus
है 201103L
।
- C ++ 14:
__cplusplus
है 201402L
।
- C ++ 17:
__cplusplus
है 201703L
।
यदि कंपाइलर पुराना हो सकता है gcc
, तो हमें कंपाइलर विशिष्ट हैकरी का सहारा लेना होगा (संस्करण मैक्रो को देखें, इसे कार्यान्वित सुविधाओं वाली तालिका से तुलना करें) या Boost.Config (जो प्रासंगिक मैक्रो प्रदान करता है) का उपयोग करें । इसका लाभ यह है कि हम वास्तव में नए मानक की विशिष्ट विशेषताओं को चुन सकते हैं, और यदि सुविधा गायब है तो वर्कअराउंड लिखें। यह अक्सर एक थोक समाधान पर पसंद किया जाता है, क्योंकि कुछ संकलक C ++ 11 को लागू करने का दावा करेंगे, लेकिन केवल सुविधाओं का सबसेट प्रस्तुत करते हैं।
Stdcxx Wiki C ++ 0x सुविधाओं के कंपाइलर समर्थन के लिए एक व्यापक मैट्रिक्स होस्ट करता है (यदि आप स्वयं सुविधाओं की जांच करने की हिम्मत करते हैं)।
दुर्भाग्य से, सुविधाओं के लिए और अधिक सूक्ष्मता से जाँच करना (जैसे व्यक्तिगत पुस्तकालय कार्य जैसे std::copy_if
) केवल आपके आवेदन की निर्माण प्रणाली में किया जा सकता है (सुविधा के साथ रन कोड, जांचें कि क्या यह संकलित और सही परिणाम उत्पन्न autoconf
करता है - यदि ले रहा है तो विकल्प का उपकरण है यह मार्ग)।