STL中的定义是什么意思?

问题描述

最近我在查看 std::array 头文件,我发现了一些奇怪的定义,例如 _GLIBCXX20_CONSTEXPR 或 _GLIBCXX17_CONSTEXPR 等。为什么需要它们?

解决方法

_GLIBCXX20_CONSTEXPR 在使用 C++20 或更新版本时扩展为 constexpr,否则什么都没有。

_GLIBCXX17_CONSTEXPR 类似,但适用于 C++17。

,

如果编译器未分别启用对 C++17 或 C++20 的支持,则这些宏为空。由于 C++20 在 C++17 之后添加了更多的 constexpr API,因此需要不同的宏。

存在类似的宏_GLIBCXX14_CONSTEXPR。 C++17 在 C++14 之后增加了更多的 constexpr API。

C++11 之前没有 constexpr API。

示例 std::array<T,N>::at,C++ 容器库 std::array

reference at( size_type pos ); (until C++17)
constexpr reference at( size_type pos ); (since C++17)

在头文件中看起来像

_GLIBCXX17_CONSTEXPR reference at( size_type pos );