2017-11-23 5 views
7

Ich hatte einen Tippfehler (|| anstelle von |) und bemerkte, dass ein solcher Code mit GCC fehlschlägt und kompiliert mit Visual. Ich weiß, dass der zweite Parameter std::ifstream ein int ist. Theoretisch muss also eine bool implizit in eine int konvertiert werden. Warum scheitert es?Typo: Bool zu Int Umwandlung induzierten Fehler in Std :: Ifstream unter Linux

Beispiel, das den Fehler verursacht (Ich habe nur einige Ints anstelle der Flags verwendet).

#include <fstream> 

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

Antwort

9

std::ifstream's constructor nimmt als zweites Argument ein std::ios_base::openmode die typedef ed von einer Implementierung definiert Typ:

typedef /*implementation defined*/ openmode; 

Es visuelle Anwendungen ganzen Zahlen scheint, GCC nicht der Fall, und es ist, warum auf Ihren Code nicht GCC.

+0

Thx für die Antwort. Ungeachtet des Grundes erscheint es mir ein bisschen seltsam. Was könnte der Grund dafür sein, dass der Typ eines Standardbibliothek-Funktionsparameters die Implementierung definiert ist? Könnte es nicht zu einem Portabilitätsproblem führen? – dgrat

+0

@dgrat du sollst nur den explizit definierten 'openmode' verwenden. – YSC

+0

Ich frage mich ein wenig über alle Up-Stimmen meiner Frage. Erwartet das Gegenteil, denn es scheint ein Anfängerproblem zu sein. – dgrat

Verwandte Themen