2012-12-13 16 views
7

मैं सिर्फ जीसीसी में निम्न चेतावनी भर में भाग गया के बारे में चेतावनी:जीसीसी निहित भिन्नता

warning: implicit dereference will not access object of type ‘volatile util::Yield’ in statement [enabled by default] 

इस कोड को संयोजित करते समय:

volatile util::Yield y1; 
util::Yield y2; 
y1 += y2; // <--- Warning triggered here. 

और दुर्भाग्य से मैं काफी समझ में नहीं आता क्या जीसीसी बताने के लिए कोशिश कर रहा है मुझे ...

वर्ग यील्ड इस प्रकार घोषित किया जाता है:

class Yield { 
public: 
    Yield(); 

    Yield &operator+=(Yield const &other); 
    Yield &operator+=(Yield const volatile &other); 
    Yield volatile &operator+=(Yield const &other) volatile; 
    Yield volatile &operator+=(Yield const volatile &other) volatile; 

    // Other operators snipped... 
}; 

कोई विचार?

धन्यवाद!

+0

यह चेतावनी सी ++ 11 के लिए अप्रचलित होनी चाहिए क्योंकि सी ++ 11 में फ़ंक्शन कॉल का लालसा अब और नहीं पढ़ा जाएगा। –

उत्तर

5

जीसीसी पुस्तिका से, के रूप में वाष्पशील करने तक पहुँचता है, लेकिन इसके बजाय एक चेतावनी है कि कोई अस्थिर पहुँचा जा सकता है मुद्दों Section 6.1 - When is a Volatile Object Accessed?

जब अस्थिर के लिए एक संदर्भ का उपयोग करते हुए, जी ++ बराबर भाव का इलाज नहीं है। इसके लिए तर्क यह है कि अन्यथा यह निर्धारित करना मुश्किल हो जाता है कि अस्थिर पहुंच कहां होती है, और अस्थिर संदर्भों को वापस करने वाले कार्यों से वापसी मूल्य को अनदेखा करना संभव नहीं है। दोबारा, यदि आप एक पठन को मजबूर करना चाहते हैं, तो एक रावल्यू के संदर्भ को डालें।

चेतावनी तथ्य यह है कि + = ऑपरेटर देता है एक अस्थिर ऑब्जेक्ट में एक संदर्भ की वजह से उपजी है, और अभिव्यक्ति 'y1 + = y2' है कि वापसी मान पर ध्यान नहीं देता है। संकलक आपको यह बताने दे रहा है कि संदर्भ वास्तव में संदर्भित नहीं किया जाएगा (यानी अस्थिर मूल्य पढ़ा नहीं जाएगा)।

+3

और यदि आप एक पठन को मजबूर नहीं करना चाहते हैं, तो आप चेतावनी से बचने के लिए कोड कैसे लिखते हैं? –

+1

@ बेनवॉइग: 'शून्य ऑपरेटर = (यील्ड कॉन्स और अन्य) अस्थिर;' –

+0

कोई वापसी मूल्य नहीं होने का कोई अच्छा समाधान नहीं है। क्या होगा यदि इसका कुछ संदर्भों में उपयोग किया जाता है और दूसरों को नहीं? –

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