Warum ofstream("log.txt", ios::app|ios::trunc); immer fehl?

Der folgende code wurde kompiliert mit VC++ Nov 2012 CTP-Version auf Windows 7 x64.

#include <fstream>

using namespace std;

int main()
{
    ofstream fout("log.txt", ios::app|ios::trunc);
    if (!fout)
    {
        cout << "An error occurred!" << endl; //Always go here! Why?
    }
}

Die cppreference.com website nicht sagen, dass ios::app kann nicht kombiniert werden mit ios::trunc.

Was sind die genaue Semantik von ios::app und ios::trunc?

  • en.cppreference.com/w/cpp/io/ios_base/openmode
  • Die Dokumentation sagt nicht, dass ios::app kann nicht kombiniert werden mit ios::trunc.
  • Was versuchen Sie zu tun? std::ios::trunc grundsätzlich verwirft alles, während std::ios::app hängt.
  • nur für die Anmeldung. Löschen Sie alte Inhalte und fügt neue Texte.
  • Es nicht sagen, es kann nicht kombiniert werden, aber es sagt, dass es die Umsetzung definiert.
  • Okay, ich verstehe.
  • Lang, auch wenn es durch die Implementierung festgelegt, ich denke auch, es ist falsch umgesetzt. Da ios::app|ios::trunc ist sinnvoll, in bestimmten Fällen.
  • VC++ Nov 2012 CTP-Version auf Windows 7 x64.
  • Ich bin damit einverstanden, ich vorstellen, dass viele es nutzen kann, aber ich muss sagen, ich sehe die Logik dahinter, so dass es nicht. Es erzwingt die Implementierung, Entscheidungen zu treffen in einer unklaren situation, IMO, natürlich. ios::app|ios::trunc sind offen-Modi, die bestimmen, in welchem Zustand sich der stream wird geöffnet, und Sie scheinen etwas widersprüchlich.
  • Was die "haltlose" über ein wörtliches Zitat aus der Norm?
  • Ich bin neugierig, was du damit meinst "die Dokumentation". C++ hat keine zentrale Dokumentation.
  • Die "Dokumentation" ich sagte nur, ist Sie unter: en.cppreference.com/w/cpp/io/ios_base/openmode
  • Sie sagen nicht, dass. Ich editieren Sie diesen link in Ihre Frage. Bitte nennen Sie Ihre Quellen in Zukunft.
  • etwa ein wörtliches Zitat aus der Norm? "-- Das ist nicht das, was ich genannt; ich bezog mich auf die einzige Antwort, die gepostet wurden, als ich meinen Kommentar.
  • C++ hat eine offizielle Dokumentation: ISO-14882. Es gibt keinen Punkt bei der Verlinkung zu anderen Seiten, wenn Fragen rein über C++; die Sprache ist definiert durch den standard. (Natürlich, viele Fragen betreffen Einzelheiten von einem oder mehreren Compilern, und nicht nur rein auf die Sprache.)
  • Andere als auf den standard als "Dokumentation", ich Stimme natürlich 🙂

InformationsquelleAutor xmllmx | 2013-02-26
Schreibe einen Kommentar