2015-03-09 5 views
8

this web page में, आईएसओ सी ++ 14 मानक के लिए जीसीसी का समर्थन परिभाषित किया गया है "प्रयोगात्मक"।क्या जीसीसी सी ++ 14 उत्पादन कोड के लिए तैयार है?

जब से मैं सी ++ 11 (जैसे std::make_unique और जेनेरिक lambdas) मेरी C++ कोड पर सी ++ 14 के सुधार से कुछ का उपयोग करना चाहते हैं, उत्पादन कोड के लिए जीसीसी 4.9 के साथ -std=c++14 विकल्प का उपयोग करने में मैं सुरक्षित हूँ , या वर्तमान जीसीसी/सी ++ 14 स्टेटस की तरह "बीटा" है और इसलिए जीसीसी/सी ++ 14 उत्पादन कोड के लिए तैयार नहीं है?

+2

आईएमओ, यह तब तक तैयार नहीं हो सकता जब तक कि C++ 11 समर्थन समाप्त नहीं हो जाता (यानी: codecvt, et al)। – Brandon

+1

यह संभवतः सहायक हो सकता है - [जीसीसी सी ++ 2014 कार्यान्वयन स्थिति] (https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014) –

+0

@ ब्रैंडन: मुझे लगता है कि जीसीसी डेवलपर्स C++ 14 से C++ 11 भागों को अलग करने के बजाय, संपूर्ण रूप से C++ 14 को लक्षित करें, उदाहरण के लिए यदि सी ++ 14 में उपयोगी विशेषताएं हैं, तो इन्हें सी ++ 11 की कम उपयोगी विशेषताओं पर प्राथमिकता दी जा सकती है। दूसरी ओर, यहां तक ​​कि अगर codecvt et al जैसी चीजें हैं। समाप्त नहीं हो गए हैं, क्या आप जीसीसी को उत्पादन गुणवत्ता सी ++ 11 कोड के लिए तैयार मानेंगे? –

उत्तर

5

वर्तमान जीसीसी/सी ++ 14 स्थिति जैसे "बीटा" की तरह है और इसलिए जीसीसी/सी ++ 14 उत्पादन कोड के लिए तैयार नहीं है?

यह निर्भर करता है कि आप किन सुविधाओं का उपयोग करते हैं। make_unique बहुत आसान है, कार्यान्वित करना आसान था, और भरोसा करने के लिए सुरक्षित होना चाहिए।

कुछ अन्य नई विशेषताओं (विशेष रूप से कोर भाषा विशेषताओं) ने कार्यान्वित करने के लिए बहुत अधिक काम किया है और अधिक बग्स ढूंढने और तय होने की प्रतीक्षा कर सकते हैं।

तो कोई भी "यह तैयार नहीं है" या "यह तैयार नहीं है" उत्तर है।

हालांकि, एक महत्वपूर्ण बात यह जानना है कि इसे अभी भी प्रयोगात्मक के रूप में लेबल किया गया है, उदाहरण के लिए जीसीसी 4.x और जीसीसी 5 के बीच पिछड़े संगतता को बनाए रखने का कोई प्रयास नहीं है। इसलिए यदि आपके पास जीसीसी 4.8 के साथ बनाया गया सी ++ 11 कोड है तो आपको इसे 4.9 के साथ बनाए गए अन्य सी ++ 11/सी ++ 14 ऑब्जेक्ट्स से लिंक करना चाहते हैं, और इसी तरह यदि आप जीसीसी 5 पर जाते हैं तो आपको इसे फिर से संकलित करने की आवश्यकता होती है। : सी ++ 11 या सी ++ 14 का उपयोग करने वाली सभी ऑब्जेक्ट्स को पुन: संकलित करें (क्योंकि std::tuple जैसे प्रकार जीसीसी 5 में डेटा लेआउट बदल गए हैं)।

सी ++ 03 कोड के लिए हम रिलीज़ के बीच परिभाषाओं को नहीं बदलते हैं, इसलिए वे स्थिर हैं।

+0

मुझे लगता है कि यह एमएसवीसी जैसे अन्य कंपाइलर्स पर भी लागू होता है :) बीटीडब्ल्यू, डेटा लेआउट बदलना कोई समस्या नहीं है: यह एमएसवीसी के लिए बहुत आम है (उन्होंने विजुअल स्टूडियो के विभिन्न संस्करणों के बीच कई एसटीएल कक्षाओं के लिए डेटा लेआउट बदल दिया)। –

+0

@ श्री सी 64, यह MSVC_ के लिए कोई समस्या नहीं है। लेकिन मैं आपको वादा करता हूं कि यह बहुत सारे जीसीसी उपयोगकर्ताओं के लिए एक बड़ी समस्या है, यही वजह है कि जीसीसी ने सीसीसी + एबीआई को जीसीसी 3.4 –

+0

कमाल से नहीं बदला है! अगर मैंने जो लिखा है उसे सही ढंग से समझ लिया गया है, तो ऐसा लगता है कि एमएसवीसी ने सी ++ एबीआई (उदा। एसटीएल क्लास लेआउट) को बदल नहीं दिया है, इसलिए वीएस2005! _ :) –

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