मैं इस वेक्टर को एक शून्य (यहां तक कि एक सूचक भी) क्यों नहीं डाल सकता?शून्य (पॉइंटर नहीं) को कास्ट करने की अनुमति है, क्यों?
int main()
{
std::vector<int> a;
(void)a;
}
इसकी अनुमति कैसे है?
मैं इस वेक्टर को एक शून्य (यहां तक कि एक सूचक भी) क्यों नहीं डाल सकता?शून्य (पॉइंटर नहीं) को कास्ट करने की अनुमति है, क्यों?
int main()
{
std::vector<int> a;
(void)a;
}
इसकी अनुमति कैसे है?
शून्य से कास्टिंग बस अभिव्यक्ति के परिणाम को त्याग देता है। कभी-कभी, आप "अप्रयुक्त चर" या "अनदेखा वापसी मूल्य" चेतावनियों से बचने के लिए इसका उपयोग करने वाले लोगों को देखेंगे।
सी ++ में, आप शायद, static_cast<void>(expr);
बजाय (void)expr;
यह मान फेंक देने का कार्य एक ही प्रभाव पड़ता है लिखना, जबकि यह स्पष्ट रूपांतरण किस तरह का प्रदर्शन किया जा रहा है बनाने चाहिए।
मानक का कहना है:
किसी भी अभिव्यक्ति स्पष्ट सीवी शून्य है, जो मामले में यह एक त्याग-मूल्य अभिव्यक्ति (खण्ड 5) हो जाता है टाइप करने के लिए परिवर्तित किया जा सकता है। [नोट: हालांकि, यदि मान अस्थायी ऑब्जेक्ट (12.2) में है, तो उस ऑब्जेक्ट के लिए विनाशक सामान्य समय तक निष्पादित नहीं होता है, और का मान विनाशक को निष्पादित करने के उद्देश्य से ऑब्जेक्ट संरक्षित किया जाता है। अंत टिप्पणी]
आईएसओ/आईईसी 14882: 2011 5.2.9 बराबर। 6
'(शून्य) expr; 'के बारे में अस्पष्ट क्या है? क्या यह सिर्फ इसलिए है क्योंकि C-casts_ का उपयोग नहीं करते हैं या सी-कास्ट संस्करण से बचने का कोई वास्तविक कारण है? – nwp
@nwp - केवल सामान्य [सी-स्टाइल कास्ट से बचने के कारण] (http://stackoverflow.com/a/32224/3852968)। शून्य करने के लिए कास्टिंग के बारे में कुछ खास नहीं है। – Andrew
लेकिन सामान्य कारणों में से कोई भी यहां लागू नहीं होता है। कोई रूपांतरण नहीं हो रहा है, इसलिए रूपांतरण की तरह भी समझ में नहीं आता है। कास्ट की खोज करने का कोई कारण नहीं है क्योंकि यह एक कंपाइलर चेतावनी को बंद करने के अलावा कुछ भी नहीं करता है। कमजोर कोड का कोई मुखौटा नहीं है। यह नियम के लिए नियमों का पालन कर रहा है, उद्देश्य के लिए नहीं। – nwp
यह एक त्याग-मूल्य अभिव्यक्ति है। यह मूल्य को त्याग देता है। वैसे, सी-शैली का उपयोग न करें। –
अप्रयुक्त चर के बारे में चेतावनी को हटाने के लिए यह एक आम तरीका है (लेकिन बेहतर नहीं)। – Jarod42
मुझे नहीं पता कि इसकी अनुमति क्यों है लेकिन मैं कभी-कभी * वैरिएबल का उपयोग नहीं करता * संकलक चेतावनियों को रोकने के लिए इसका उपयोग करता हूं। – Galik