मुझे कभी-कभी ऐसे मामलों का सामना करना पड़ता है जहां यह एक चर के लिए const
होना चाहिए, लेकिन केवल इसके दायरे के बाद के हिस्से के लिए। उदाहरण के लिए, एक ब्लॉक के पहले भाग मूल्य निर्धारित कर सकते हैं, और अगर यह स्पष्ट है कि हम "किया" कर रहे थे कि चर की स्थापना थे बाकी की पठनीयता में सुधार किया जा सकता है -निरंतर, लेकिन केवल इस दायरे के शेष के लिए
void foo() {
int n;
// Do things that result in initialization of n
freeze n; // Imaginary construct that declares "n" const for rest of scope
// Later steps that depend on 'n' but do not change it
}
कोई सी ++ मुहावरा है कि कैप्चर है यह पैटर्न? बेशक ब्लॉक के बाद के हिस्से को एक अलग समारोह में ले जाया जा सकता है, लेकिन क्या इसे चीजों को चारों ओर घुमाने के बिना किया जा सकता है?
क्या यह उस तर्क को समाहित करने के लिए और अधिक समझ में नहीं आता है जो 'एन' को अपने स्वयं के कार्य में उत्पन्न करता है? और फिर बस 'const int n = gimme_an_n(); '। आप * lambdas के साथ उस इनलाइन कर सकते हैं, लेकिन ... क्या आप चाहते हैं? – paddy