Der Leistungsvorteil besteht darin, dass die Datei nicht erneut geöffnet werden muss, nachdem die #pragma-Datei gelesen wurde. Bei Guards muss der Compiler die Datei öffnen (was sehr zeitaufwändig sein kann), um die Information zu erhalten, dass der Inhalt nicht erneut aufgenommen werden soll.
Das ist nur Theorie, denn einige Compiler öffnen automatisch keine Dateien, die keinen Lesecode enthalten, für jede Kompiliereinheit.
Wie auch immer, es ist nicht der Fall für alle Compiler, so dass idealerweise #pragma einmal für plattformübergreifende Code vermieden werden müssen hat es nicht Standard überhaupt / haben keine standardisierte Definition und Wirkung. Doch praktisch ist es wirklich besser als Wachen.
Letztendlich ist die einen besseren Vorschlag können Sie nicht bekommen Um sicher zu sein, dass Sie die beste Geschwindigkeit von Ihrem Compiler erhalten, ohne das Verhalten jedes Compilers in diesem Fall überprüfen zu müssen, sollten Sie sowohl pragma once als auch guards verwenden.
#ifndef NR_TEST_H
#define NR_TEST_H
#pragma once
#include "Thing.h"
namespace MyApp
{
// ...
}
#endif
Auf diese Weise erhalten Sie das Beste von beidem (plattformübergreifend und schnelle Kompilierung).
Da die Eingabe länger dauert, verwende ich persönlich ein Tool, das mir hilft, all das auf sehr einfache Art und Weise zu erstellen (Visual Assist X).