g++
-std=c++11
साथ यह स्वीकार करने के लिए लगता है:इस कोड में कोई संकुचित रूपांतरण क्यों नहीं है, जिसके परिणामस्वरूप त्रुटि हुई है?
#include <vector>
#include <initializer_list>
std::vector<float> vf={1,2,3}; // Isn't this narrowing (i.e., an error)?
int main() {}
यह प्रतीत होता है कि टिप्पणी के साथ लाइन बाहर त्रुटि चाहिए, लेकिन ऐसा नहीं है।
अद्यतन
standardese (8.5.4 p7) को परिभाषित करता है यही कारण है कि यह ठीक है की ओर इशारा करते के लिए जेसी के लिए धन्यवाद।
const int v5=5;
int v6=6;
vector<double> vd1={1,2,3,4}; // OK
vector<double> vd2={1,2,3,4,v5}; // Still OK, v5 is const
vector<double> vd3={1,2,3,4,v5,v6}; // Error, narrowing conversion, because v6
// is non-const
vector<double> vd4={1,2,3,4,v5,static_cast<const int>(v6)}; // Also errors on
// gcc 4.7.2, not sure why.
मुझे आशा है कि मैं सिर्फ उदाहरण प्रस्तुत दूसरों की मदद करेगा जब प्रारंभकर्ता सूचियों का उपयोग कर पिछले कुछ संकुचन मुद्दों पाने के लिए: यहां कुछ नमूना कोड व्यवहार मानक द्वारा परिभाषित स्पष्ट करने के लिए मदद करता है।
यदि कोई जानता है कि आखिरी मामला मानक परिभाषा का उल्लंघन क्यों करता है, तो कृपया एक टिप्पणी पोस्ट करें।
तुम्हें क्या लगता है यह संकुचन है करते हैं? –
संकीर्णता 'फ्लोट' से 'int' –
होगी कि रूपांतरण कैसे संकीर्ण हो रहा है? जीसीसी [चेतावनी जारी करता है] (http://liveworkspace.org/code/1FWK1L$2) जब संकुचित किया जाता है, और आप इसे '-pedantic-error'' के साथ संकलित करके एक त्रुटि में बदल सकते हैं (http: // liveworkspace.org/code/1FWK1L$1)। – Praetorian