Was sind Behauptungen? und warum würden Sie diese einsetzen?
Wie assertions in c++? Beispiel-code dankbar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie assertions in c++? Beispiel-code dankbar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Behauptet sind eine Möglichkeit, explizit die überprüfung der Annahmen, dass Ihr code macht, der Ihnen hilft, die Spur zu viele bugs, die durch Einengung, was mögliche Probleme sein könnten. Sie sind in der Regel nur dann ausgewertet, in eine spezielle "debug" - build der Anwendung, so dass Sie nicht verlangsamen die endgültige version.
Sagen wir mal, Sie schrieb eine Funktion, die hat einen pointer als argument. Es gibt eine gute chance, dass Ihr code wird davon ausgegangen, dass der Zeiger nicht NULL ist, also warum nicht explizit prüfen, dass mit einer Behauptung? Hier ist, wie:
Eine wichtige Sache zu beachten ist, dass die Ausdrücke, die Sie geltend machen müssen, nie haben Nebenwirkungen, da Sie nicht in der release-build. So nie etwas wie das hier tun:
Einige Leute fügen auch gerne kleine Botschaften in Ihre Behauptungen zu helfen, geben Ihnen Bedeutung. Da ein string immer evaulates zu wahren, könnten Sie schreiben dies:
Behauptung sind Boolesche Ausdrücke, die sollte in der Regel immer wahr sein.
Sie werden verwendet, um sicherzustellen, was Sie erwartet, ist auch, was passiert.
Schrieb Sie die Funktion zum Umgang mit Alter, Sie auch 'wissen' für Sie sicher, dass Sie stets vernünftige Argumente, dann nutzen Sie einen geltend machen. Es ist wie zu sagen "ich weiß, das kann nie schief gehen, aber wenn Sie es tut, will ich wissen", weil, na ja, jeder macht Fehler.
Es ist also nicht zu überprüfen, für sinnvoll, Benutzer-Eingabe, wenn es gibt Szenario ist, wo etwas schief gehen kann, verwenden Sie kein nicht geltend machen. Wirklich überprüft und sich mit den Fehlern.
Versichert sind in der Regel nur für debug-builds, also nicht code mit Nebenwirkungen behauptet.
Behauptungen werden verwendet, um zu überprüfen, design-Annahmen, in der Regel in Bezug auf die Eingabe von Parametern und Rückgabe von Ergebnissen. Zum Beispiel
Den assert-Anweisungen sind nicht erforderlich für den code zu laufen, aber überprüfen Sie die Gültigkeit der Eingabe und Ausgabe. Wenn die Eingabe ungültig ist, es ist ein Fehler in der aufrufenden Funktion. Wenn die Eingabe gültig ist, und die Ausgabe ist ungültig, es ist ein Fehler in diesem code. Sehen design by contract für mehr details zu dieser Verwendung geltend macht.
Edit: Wie schon in anderen Beiträgen, die default-Implementierung von assert ist nicht enthalten in der Version der run-time. Eine gängige Praxis, die viele nutzen würden, mich eingeschlossen, ist es zu ersetzen durch eine version, die im release-build, aber ist nur genannt in einem Diagnose-Modus. Dies ermöglicht auch eine korrekte regression Tests auf release-builds mit voller assertion checking. Meine version ist wie folgt;
Gibt es eine kleine Laufzeit-overhead bei dieser Technik, aber es macht das tracking von bugs, die es in dem Bereich viel einfacher.
Verwenden Behauptungen zu überprüfen "kann nicht passieren" - Situationen.
Typische Nutzung: Prüfung auf ungültigen/unmöglichen Argumenten an der Spitze einer Funktion.
Selten gesehen, aber immer noch nützlich: Schleife, Invarianten und nachbedingungen.
Behauptungen sind Aussagen, so dass Sie testen Sie alle Annahmen, die Sie vielleicht in Ihrem Programm. Dies ist besonders nützlich, um ein Dokument in Ihrem Programm-Logik (Vorbedingungen und nachbedingungen). Behauptungen, dass scheitern in der Regel Laufzeitfehler aus, und sind Zeichen, dass etwas SEHR falsch mit Ihrem Programm - Ihre Behauptung ist fehlgeschlagen, da etwas, das Sie davon ausgegangen, um wahr zu sein war es nicht. Die üblichen Gründe sind: es ist ein Fehler in deiner Funktion wird die Logik, oder der Aufrufer deiner Funktion übergeben Sie fehlerhafte Daten.
Eine Behauptung ist etwas, was Sie hinzufügen, um das Programm, das verursacht das Programm zu stoppen sofort, wenn eine Bedingung erfüllt ist, und eine Fehlermeldung angezeigt. Sie in der Regel verwenden Sie für Dinge, die Sie glauben, kann nie passieren in Ihrem code.
Diese nicht die behaupten Anlage, die nach unten kommen, um uns von der frühen C-Tage, aber Sie sollten sich auch bewusst sein, Boost StaticAssert Funktionalität, im Falle, dass Ihre Projekte verwenden können, zu Steigern.
Den standard-C/C++ assert funktioniert während der Laufzeit. Die Boost-StaticAssert-Funktion können Sie machen einige Klassen von Zusicherungen zur compile-Zeit, fangen Logik-Fehler und die wie früher noch.
Hier ist ein definition, was eine Behauptung ist und hier ist einige Beispiel-code. Kurz gesagt eine Behauptung ist eine Möglichkeit für einen Entwickler um zu testen, seine (oder Ihre) Annahmen über den Zustand des Codes zu einem bestimmten Punkt. Zum Beispiel, wenn Sie Taten, waren Sie den folgenden code:
Du willst wohl behaupten, dass mypointer ist nicht NULL, weil das ist Ihre Annahme -, dass mypointer wird nie NULL sein, bevor Sie den Anruf.