मेरे पास कुछ स्थिरांक हैं जिन्हें केवल कोड को सरल बनाने के लिए संकलन-समय पर उपयोग करने की आवश्यकता है, इसलिए मुझे रनटाइम पर उपलब्ध वास्तविक चर की आवश्यकता नहीं है।एक सी ++ कक्षा के अंदर संकलन-समय (स्थैतिक) निरंतर परिभाषित करने के लिए कैसे?
परंपरागत रूप से यह तरीका किया गया था #define NAME 123
लेकिन मुझे एक प्रकार का सुरक्षित विकल्प चाहिए।
कक्षाओं के बाहर आप const int name = 123;
कर सकते हैं जो ठीक काम करता है, लेकिन यह कक्षा के अंदर रखना संभव नहीं लगता है।
class Example {
public:
const double usPerSec = 1000000.0;
};
double usOneMinute = 60 * Tempo::usPerSec;
काम करता है, लेकिन जीसीसी साथ काम नहीं करता:
error: non-static const member ‘const double Example::usPerSec’,
can’t use default assignment operator
आप इसे स्थिर बनाने के द्वारा इसे ठीक कर सकते हैं, लेकिन फिर विजुअल C++ शिकायत: उदाहरण इसके लिए
error C2864: 'Example::usPerSec' : a static data member with an in-class
initializer must have non-volatile const integral type
type is 'const double'
मुझे लगता है कि इसका मतलब है कि वीसी ++ केवल static const int
स्वीकार करेगा।
मैं कन्स्ट्रक्टर में मान को सेट करने से बचना चाहता हूं क्योंकि मुझे मूल्य तक पहुंचने के लिए रनटाइम पर कक्षा का एक उदाहरण चाहिए, जबकि वास्तव में मैं इसे सभी संकलित समय पर संभालना चाहता हूं जैसे #define
है।
तो मैं इसे वैश्विक बनाने या #define
का उपयोग किए बिना किसी कक्षा के अंदर double
के रूप में निरंतर परिभाषित कैसे कर सकता हूं, जो क्लास का उदाहरण किए बिना काम करेगा, और यह प्रमुख सी ++ 03 कंपाइलर्स के साथ काम करेगा ?
'+ 1, मुझे लगता है कि यह एक उपयोगी बिंदु है। – Angew