传统上,避免C++中多个头部包含的标准和可移植方法是使用#ifndef - #define - #endif预编译器指令方案,也称为宏保护方案(参见下面的代码片段).
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
Run Code Online (Sandbox Code Playgroud)
然而,在大多数实现/编译器中(见下图),有一个更"优雅"的替代方案,其功能与调用的宏保护方案相同#pragma once.#pragma once与宏保护方案相比具有几个优点,包括更少的代码,避免名称冲突,有时提高编译速度.

做了一些研究,我意识到尽管#pragma once几乎所有已知的编译器都支持指令,但是指令是否#pragma once是C++ 11标准的一部分还是存在紊乱.
#pragma once指令是否属于C++ 11标准的一部分吗?#pragma once)的优点/缺点,那也是很好的.