2017-11-23 8 views
7

तहत एसटीडी में रूपांतरण प्रेरित त्रुटि :: ifstream int करने के लिए मैं एक टाइपो (||| के बजाय) था और पाया है इस तरह के एक कोड जीसीसी के साथ विफल रहता है और दृश्य के साथ संकलित करता है। मुझे पता है कि std::ifstream का दूसरा पैरामीटर int है। तो सैद्धांतिक रूप से, bool को int पर निहित रूप से परिवर्तित किया जाना है। तो यह क्यों विफल रहता है?टाइपो: bool लिनक्स

उदाहरण त्रुटि को प्रेरित करना (मैंने झंडे के बजाए कुछ चींटियों का उपयोग किया)।

#include <fstream> 

int main(int argc, char * argv[]) { 
    std::ifstream("foo", 2 | 3 || 4) 
} 

उत्तर

9

std::ifstream's constructor दूसरा तर्क के रूप में लेता है एक std::ios_base::openmode जो एक कार्यान्वयन से typedef एड है प्रकार परिभाषित:

typedef /*implementation defined*/ openmode; 

यह जीसीसी नहीं है दृश्य का उपयोग करता है पूर्णांकों लगता है, और क्यों अपने कोड पर विफल रहता है यह जीसीसी।

+0

उत्तर के लिए Thx। कारण के बावजूद, यह मेरे लिए थोड़ा अजीब लगता है। मानक पुस्तकालय फ़ंक्शन पैरामीटर का प्रकार कार्यान्वयन परिभाषित करने का कारण क्या हो सकता है। क्या यह पोर्टेबिलिटी मुद्दा नहीं बन सका? – dgrat

+0

@dgrat आपको केवल 'ओपनमोड' स्पष्ट रूप से परिभाषित किया जाना चाहिए। – YSC

+0

मुझे अपने प्रश्न के सभी अप-वोटों के बारे में कुछ आश्चर्य है। विपरीत की उम्मीद है, क्योंकि एक शुरुआती मुद्दा की तरह लगता है। – dgrat

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