Um Ihre erste Frage zu beantworten: Ja, es ist klug und obligatorisch, Wächter um Vorlagenklassen einzuschließen. Oder strengere den gesamten Inhalt jeder Header-Datei.
Dies ist die Art und Weise, die One Definition Regel zu befolgen, wenn Sie Zeug in Header-Dateien haben, so dass es herum geteilt und immer noch sicher ist. Es kann andere Header-Dateien geben, die deins enthalten. Wenn der Compiler eine Moduldatei kompiliert, kann es eine #include
Ihrer Header-Datei viele Male sehen, aber die Wachen treten zu der zweiten und nachfolgenden Zeiten ein, um sicherzustellen, dass der Compiler den Inhalt nur einmal sieht.
Es spielt keine Rolle, dass der Compiler alles neu analysiert; das ist seine Aufgabe. Sie müssen nur einmal den Inhalt bereitstellen und dann hat der Compiler es gesehen und kann sich so oft wie nötig darauf beziehen.
Fügen Sie hinzufügen, Wachen immer, sich daran zu gewöhnen, wie es eine gute Praxis ist. – Poni
Wenn Sie eine Entwicklung auf Win32 durchführen, fügen Sie "#pragma once" ein, wenn Sie Wächter verwenden. – KitsuneYMG
+1 für die Angabe, dass Instanziierungen mit der internen Datenstruktur zum Zeitpunkt der ersten Sweep erstellt – Otuken