14

सरल और कम से कम निकला हुआ जिस तरह से, संकलक को इंगित करने के लिए संकलक विकल्प, #define रों, typedef रों, या टेम्पलेट्स के माध्यम से है कि क्या क्या है, कि हर बार जब मैं कहता हूँ T, मैं वास्तव में मतलब T const? मैं बाहरी प्रीप्रोसेसर का उपयोग न करना पसंद करूंगा। चूंकि मैं mutable कीवर्ड का उपयोग नहीं करता, इसलिए यह परिवर्तनीय स्थिति को इंगित करने के लिए पुन: प्रयोजन के लिए स्वीकार्य होगा।डिफ़ॉल्ट बनाएँ द्वारा लगातार सभी प्रकार C++

संपादित करें: के बाद से इस की मंशा गलत था पूरी तरह (और के बाद से मैं चारों ओर कुछ ही घंटों स्पष्ट करने के लिए नहीं था), मुझे समझाती हूँ। संक्षेप में, मैं सिर्फ यह जानना चाहता हूं कि संकलन समय पर टाइप सिस्टम में हेरफेर करने के लिए कौन सी सिस्टम उपलब्ध हैं। मुझे कोई परवाह नहीं है अगर यह गैर मानक, खराब, अस्पष्ट, बेकार कोड बनाता है। मैं इसे उत्पादन में उपयोग नहीं कर रहा हूं। यह सिर्फ एक जिज्ञासा है।

संभावित (सबऑप्टिमल) समाधान अब तक:

// I presume redefinition of keywords is implementation-defined or illegal. 
#define int int const 
#define ptr * const 
int i(0); 
int ptr j(&i); 

typedef int const Int; 
typedef int const* const Intp; 
Int i(0); 
Intp j(&i); 

template<class T> 
struct C { typedef T const type; typedef T const* const ptr; }; 
C<int>::type i(0); 
C<int>::ptr j(&i); 
+7

-1। – piotr

+0

हम अस्पष्ट हैं कि आप इससे क्या हासिल करने की कोशिश कर रहे हैं। निश्चित रूप से यह सिर्फ टाइपिंग कॉन्स से बचने की कोशिश नहीं कर रहा है।या किसी अन्य तरीके से पूछने के लिए: क्या आप हमें बता सकते हैं कि इन कॉन्स प्रकारों को प्राप्त करके आप क्या हासिल कर सकते हैं? आपके अंतिम उद्देश्य के लिए एक बेहतर दृष्टिकोण हो सकता है। । – MtnViewMark

+1

@MtnViewMark: मैं ईमानदारी से यह जानकर उत्सुक था कि संकलन समय पर प्रकार प्रणाली में हेरफेर करने के लिए क्या साधन उपलब्ध हैं। वास्तविक अभ्यास शायद मामूली में कोई फर्क नहीं पड़ता। मैं @ piotr मुझे downvoting खोजने के लिए आश्चर्यचकित था। –

उत्तर

10

ओपन सोर्स सी ++ कंपाइलर लें और इसे संशोधित करें।

मुझे लगता है कि डाउनवॉट्स का मुख्य कारण यह है कि लोग सोचते हैं कि आप सी ++ को संशोधित करने का प्रयास कर रहे हैं। उन्हें बताएं कि आप एक विश्वविद्यालय परियोजना के रूप में "सी-कॉन्स" नामक एक नई भाषा बना रहे हैं।

व्यक्तिगत रूप से मुझे लगता है कि यह एक दिलचस्प विचार है - आप अपरिवर्तनीय प्रकारों से प्रदर्शन और पठनीयता लाभ के सभी प्रकार प्राप्त कर सकते हैं - बस सबसे अधिक कार्यात्मक भाषाओं को देखें।

+0

+1 यह निश्चित रूप से अब तक का सबसे अच्छा जवाब है, लेकिन मैं इसे अन्य उत्तरों को संपादित प्रश्न तक पहुंचने का मौका देने के लिए इसे स्वीकार करने के लिए रोक रहा हूं। –

+0

दरअसल, चूंकि कॉन्स्ट_कास्ट के माध्यम से कॉन्स्ट को हटाया जा सकता है, इसलिए आप इससे प्रदर्शन लाभ प्राप्त नहीं कर सकते हैं (जब तक कि आपकी संशोधित भाषा कॉन्स्ट_कास्ट ऑपरेटर को अक्षम/संशोधित न करे) – tohava

1

आप संकलक बताते हैं या अन्य लोगों को पढ़ने या अपने कोड का उपयोग बताने की कोशिश कर रहे हैं? कंपाइलर कुछ भी अलग नहीं करेगा क्योंकि उपयोगकर्ता परिभाषित प्रकार const का उपयोग किया जाता है। असल में, यह सब कुछ विधियों (उपयोगकर्ता परिभाषित या निहित) के सेट को बदलता है जिसे उस ऑब्जेक्ट के साथ उपयोग किया जा सकता है। बदले में, संकलक को रन-टाइम प्रतिनिधित्व पर कुछ अनुकूलन का अनुमान लगाने की अनुमति देता है।

class Point { 
    // An immutable Point data object 
    public: 
     Point(int ix, int iy): x(ix), y(iy) { } 
     Point(const Point& p): x(p.x), y(p.y) { } 

     Point add(const Point& p) const; 
     int taxiDistance() const; 
     // etc... all const members 

     const int x, y; // const can only be init'd at construction time 

    private: 
     Point& operator=(const Point& p); // never implemented! 
} 
+1

आपको यह गलत लगता है। वह उन सभी स्थानों पर "कॉन्स्ट" शब्द लिखना बंद करना चाहता है, और फिर भी शब्द की तरह सी ++ कार्य है। बेकार अभ्यास, ज़ाहिर है। वैसे भी मुझे लगता है कि वह क्या चाहता है असंभव है। –

+0

मैंने उत्तर दिया कि मुझे लगता है कि उसका असली लक्ष्य क्या हो सकता है, क्योंकि बस टाइपिंग कॉन्स से बचने की कोशिश करना अचूक है और केवल सवाल पूछता है क्यों? मैंने ओपी पर स्पष्टीकरण मांगने पर एक टिप्पणी छोड़ दी है। – MtnViewMark

+0

@Stefan: हाँ, यह बात है। बेशक यह बेकार है। मुझे शायद शुरुआत से यह स्पष्ट करना चाहिए था कि मैं समझता हूं कि मैं क्या कर रहा हूं और मैं बस उत्सुक हूं। –

2

यहां तक ​​कि अगर आप इस (जो मुझे लगता है कि आप नहीं कर रहे हैं ऐसा करने में सक्षम हैं:

class/struct प्रकारों के लिए, आप बस हर सदस्य स्थिरांक बनाकर इस दोनों संकलक और उपयोगकर्ताओं के लिए स्पष्ट कर सकते हैं), अपने कोड को पढ़ने वाले अन्य लोगों के बारे में सोचें। उन्हें यह समझने की संभावना नहीं है कि सबकुछ स्थिर है और नतीजतन आपके कोड को समझने की संभावना नहीं है।

+2

यह एक बहुत ही नकारात्मक दृष्टिकोण है। प्रोग्रामिंग भाषाओं में अनुसंधान अध्ययन का एक पूरी तरह से वैध क्षेत्र है। यदि आप किसी मौजूदा भाषा में वृद्धिशील परिवर्तन करना चाहते हैं, तो आपको * कुछ गैर-मानक करना होगा। अगर हर कोई आपका दृष्टिकोण लेता है, तो कोई भी प्रोग्रामिंग भाषा कभी नहीं बदलेगी। सी ++ की एक अपरिवर्तनीय बोली कुछ समस्याओं के लिए सही बात हो सकती है। मुझे संदेह नहीं है। लेकिन मैं प्रयोग और सीखने के लिए पोस्टर की सराहना करता हूं। – sigfpe

+0

दाएं। जब मैंने अपना जवाब सबमिट किया तो ओपी का संपादन वहां नहीं था। मुझे एहसास नहीं हुआ कि यह सवाल सी ++ और/या गैर-मानक एक्सटेंशन/प्रोग्रामिंग तकनीकों की सीमाओं को सीखने/खोजने के बारे में था। मैं सब प्रयोग और शोध के लिए हूं, बस अगले व्यक्ति के साथ आने के लिए पठनीय कोड के महत्व पर जोर देना चाहता था। धन्यवाद! -माइक –

+0

कूल! हम सभी समझौते में हैं। – sigfpe

0

मैं इसके खिलाफ सलाह दूंगा। यदि आप किसी भी लक्ष्य को प्राप्त करने के लिए प्रबंधन करते हैं (कुछ समय बाद आप सहित) आश्चर्यचकित होता है जब वह आपका कोड पढ़ता है और वह अपेक्षा से अलग व्यवहार करता है।

कृपया जहां भी इसकी आवश्यकता हो, सभी के लिए कॉन्स्ट संशोधक सादा जोड़ें। आपका कोड अधिक बार किराया पढ़ा जा रहा है तो यह लिखा जा रहा है!

+0

हो सकता है, लेकिन डिफ़ॉल्ट रूप से 'const' की कमी प्रोग्रामिंग भाषाओं के रूप में सी और सी ++ का एक महत्वपूर्ण गलत डिज़ाइन है। यह बेहतर होगा, यह बहुत बेहतर होगा, अगर 'कॉन्स्ट' डिफ़ॉल्ट था और आपको स्पष्ट रूप से 'var' या एक चर प्राप्त करने की तरह कहना था। असल में, चर से स्थिरांक को अलग करने की आवश्यकता इतनी बार आती है कि यह बहुत बुरा है कि * int m' (स्थिर!) और '$ int m' (एक चर) जैसे * विराम चिह्न * बिंदु को परिभाषित नहीं किया गया था। – thb

0

आप कोड मानक सी ++ रख सकते हैं और प्रकार की जांच की एक अतिरिक्त परत तैयार कर सकते हैं।

एक खाली म्यूटबल मैक्रो कॉन्स्ट चेकर के संकेत के रूप में कार्य कर सकता है। कोड संकलन करने के लिए स्थानों पर स्पष्ट कॉन्स्ट की आवश्यकता हो सकती है। खराब विचार के लिए

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