मैं एक जटिल परिस्थिति पर ठोकर खाई जहां मुझे एक स्पष्ट संकुचन रूपांतरण मिला है, लेकिन मुझे निराश है कि संकलक (जीसीसी -4.7.2) -Wall -Wnarrowing -pedantic
झंडे के बावजूद चेतावनी नहीं उठाया। कृपया निम्नलिखित कार्यक्रम देखें:कोष्ठक के साथ प्रारंभ करते समय संकुचित करने के लिए कोई चेतावनी
struct A {
int m;
A(int m) : m(m) {};
};
int main() {
unsigned long v = 0;
A a1(v); // narrowing, but no warning (should this not cause a warning?)
A a2{v}; // narrowing, warning raised (expected)
}
a1
के प्रारंभ संकलक से एक झलक के रूप में इतना बिना उड़ान भरने के लिए लगता है। बस यह सुनिश्चित करने के लिए कि मैं पागल नहीं जा रहा था, मैंने उसी तरीके से a1
प्रारंभ करने की कोशिश की, लेकिन माता-पिता के बजाय ब्रेसिज़ के साथ। संकलक दूसरे मामले में संकुचन के बारे में चेतावनी देता है, जैसा कि अपेक्षित था।
स्पष्ट होने के लिए: मैं प्रारंभिकरण-सूचियों में रूपांतरण को कम करने की वैधता के बारे में नहीं पूछ रहा हूं। मुझे पता है कि यह कानूनी नहीं है - a2
का घुंघराले-प्रारंभिक प्रारंभिकता केवल एक स्वच्छता जांच थी। मेरा प्रश्न प्रारंभिक सूचियों से संबंधित नहीं है। यह एक डुप्लिकेट सवाल नहीं है।
क्या संकलक मुझे a1
की शुरुआत के लिए संकुचित करने के बारे में चेतावनी नहीं देना चाहिए?
'ए 1 'के लिए कन्स्ट्रक्टर एक अंतर्निहित रूपांतरण कर सकता है, जबकि' ए 2 'के लिए नहीं हो सकता है। आपको क्यों लगता है कि वे वही होना चाहिए? –
क्या होगा यदि आप '-Wconversion' ध्वज जोड़ते हैं? –
यह एक डुप्लिकेट नहीं है। मुझे पहले से ही पता है कि प्रारंभिक सूचियों के भीतर रूपांतरण को सीमित करना अवैध है। मैं कोष्ठक के साथ प्रारंभिकizaiton के बारे में पूछ रहा हूँ। –