मैं सिर्फ सी में कूद कर रहा हूँ ++, Cसी ++ सरणी आकार घोषणा और स्थिरांक
से सी में (89/90) आ रहा है, एक const
वास्तव में नहीं है एक निरंतर (के रूप में एक #define
करने का विरोध 'd, enum
, या शाब्दिक), बल्कि एक बार सेट केवल पढ़ने के लिए। यानी, मैं कर सकते हैं:
const int x = rand();
और यह ठीक है - बिंदु जा रहा है x
क्रम तक ज्ञात नहीं है। इसलिए, मैं
int arr[x]; // error - x is not a compile-time constant
फिर, सी मानकों में से एक (99?) आगे बढ़ गया और परिवर्तनीय-लंबाई सरणी के लिए अनुमति दी गई। हालांकि मैं आमतौर पर सी में एएनएसआई मानक के खिलाफ कोड करता हूं, लेकिन वास्तव में इसका असर पड़ा है कि मैं सी ++ 11 लेने की कोशिश कर रहा हूं।
जहां तक मुझे पता है, सी ++ परिवर्तनीय-लंबाई सरणी के लिए अनुमति नहीं देता है। हालांकि, कई कंपाइलर्स इसे एक एक्सटेंशन (जीसीसी?) के रूप में अनुमति देते हैं। समस्या यह है कि अब मैं सी ++ 11 सीखने की कोशिश कर रहा हूं, मैं यह नहीं बता सकता कि क्या मैं कोडिंग कर रहा हूं वैध सी ++ है, या सी ++ सी 99-संगतता के साथ विस्तारित है। पूर्व:
std::default_random_engine e{};
std::uniform_int_distribution<int> d{};
const int x{d(e)};
int arr[x]; // compiles
मैं यह नहीं बता सकता कि यह वैध सी ++ है या नहीं। जाहिर है, x
का मान रनटाइम तक ज्ञात नहीं है। मुझे लगता है कि मैं सी और सी ++ const
के बीच अंतर को समझ नहीं सकता?
मान्य नहीं है। झंडे का प्रयोग करें '-std = ...' जहां '...' मानक है, उदा। 'सी ++ 11' या 'सी ++ 98'। – juanchopanza
आप '-pedantic' – Jarod42
@juanchopanza का भी उपयोग कर सकते हैं मैंने वास्तव में' -std = C++ 11' का उपयोग करके संकलित किया था और क्लैंग ने कोई चेतावनी नहीं दी थी। शाफिक ने सुझाव दिया कि चेतावनी पॉप अप करने के सुझाव के रूप में '-pedantic' ध्वज का उपयोग करना! – zac