2015-09-28 9 views
12

मैं इस वेक्टर को एक शून्य (यहां तक ​​कि एक सूचक भी) क्यों नहीं डाल सकता?शून्य (पॉइंटर नहीं) को कास्ट करने की अनुमति है, क्यों?

int main() 
{ 
    std::vector<int> a; 
    (void)a; 
} 

इसकी अनुमति कैसे है?

+3

यह एक त्याग-मूल्य अभिव्यक्ति है। यह मूल्य को त्याग देता है। वैसे, सी-शैली का उपयोग न करें। –

+2

अप्रयुक्त चर के बारे में चेतावनी को हटाने के लिए यह एक आम तरीका है (लेकिन बेहतर नहीं)। – Jarod42

+0

मुझे नहीं पता कि इसकी अनुमति क्यों है लेकिन मैं कभी-कभी * वैरिएबल का उपयोग नहीं करता * संकलक चेतावनियों को रोकने के लिए इसका उपयोग करता हूं। – Galik

उत्तर

15

शून्य से कास्टिंग बस अभिव्यक्ति के परिणाम को त्याग देता है। कभी-कभी, आप "अप्रयुक्त चर" या "अनदेखा वापसी मूल्य" चेतावनियों से बचने के लिए इसका उपयोग करने वाले लोगों को देखेंगे।

सी ++ में, आप शायद, static_cast<void>(expr); बजाय (void)expr;

यह मान फेंक देने का कार्य एक ही प्रभाव पड़ता है लिखना, जबकि यह स्पष्ट रूपांतरण किस तरह का प्रदर्शन किया जा रहा है बनाने चाहिए।

मानक का कहना है:

किसी भी अभिव्यक्ति स्पष्ट सीवी शून्य है, जो मामले में यह एक त्याग-मूल्य अभिव्यक्ति (खण्ड 5) हो जाता है टाइप करने के लिए परिवर्तित किया जा सकता है। [नोट: हालांकि, यदि मान अस्थायी ऑब्जेक्ट (12.2) में है, तो उस ऑब्जेक्ट के लिए विनाशक सामान्य समय तक निष्पादित नहीं होता है, और का मान विनाशक को निष्पादित करने के उद्देश्य से ऑब्जेक्ट संरक्षित किया जाता है। अंत टिप्पणी]

आईएसओ/आईईसी 14882: 2011 5.2.9 बराबर। 6

+0

'(शून्य) expr; 'के बारे में अस्पष्ट क्या है? क्या यह सिर्फ इसलिए है क्योंकि C-casts_ का उपयोग नहीं करते हैं या सी-कास्ट संस्करण से बचने का कोई वास्तविक कारण है? – nwp

+1

@nwp - केवल सामान्य [सी-स्टाइल कास्ट से बचने के कारण] (http://stackoverflow.com/a/32224/3852968)। शून्य करने के लिए कास्टिंग के बारे में कुछ खास नहीं है। – Andrew

+5

लेकिन सामान्य कारणों में से कोई भी यहां लागू नहीं होता है। कोई रूपांतरण नहीं हो रहा है, इसलिए रूपांतरण की तरह भी समझ में नहीं आता है। कास्ट की खोज करने का कोई कारण नहीं है क्योंकि यह एक कंपाइलर चेतावनी को बंद करने के अलावा कुछ भी नहीं करता है। कमजोर कोड का कोई मुखौटा नहीं है। यह नियम के लिए नियमों का पालन कर रहा है, उद्देश्य के लिए नहीं। – nwp

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

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