El beneficio de rendimiento es no tener que volver a abrir el archivo una vez que se ha leído el #pragma una vez. Con los guardias, el compilador tiene que abrir el archivo (que puede ser costoso a tiempo) para obtener la información de que no debe incluir su contenido nuevamente.
Esa es la teoría solo porque algunos compiladores no abrirán automáticamente archivos que no tienen ningún código de lectura, para cada unidad de compilación.
De todos modos, no es el caso para todos los compiladores, por lo que idealmente #pragma debe evitarse una vez para el código multiplataforma si no es estándar / no tiene una definición y efecto estandarizados. Sin embargo, prácticamente, es realmente mejor que los guardias.
Al final, la mejor sugerencia que puede obtener para asegurarse de tener la mejor velocidad de su compilador sin tener que verificar el comportamiento de cada compilador en este caso, es usar pragma una vez y guardias.
#ifndef NR_TEST_H
#define NR_TEST_H
#pragma once
#include "Thing.h"
namespace MyApp
{
// ...
}
#endif
De esa manera, obtienes lo mejor de ambos (multiplataforma y velocidad de compilación de ayuda).
Como es más largo de escribir, yo personalmente uso una herramienta para ayudar a generar todo eso de una manera muy fácil (Visual Assist X).
#pragma once
parece evitar algunos problemas de vista de clase en VS 2008. Estoy en el proceso de deshacerme de incluir guardias y reemplazarlos#pragma once
por esta razón.