Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ STL中的定义是什么意思?_C++_Libstdc++ - Fatal编程技术网

C++ STL中的定义是什么意思?

C++ STL中的定义是什么意思?,c++,libstdc++,C++,Libstdc++,最近我在查看std::array头文件时,发现了一些wierd定义,例如_GLIBCXX20 _CONSTEXPR或_GLIBCXX17(u CONSTEXPR)等。为什么需要它们呢?\u GLIBCXX20(u CONSTEXPR在使用C++20或更新版本时扩展为constepr \u GLIBCXX17\u CONSTEXPR与之类似,但对于C++17而言。\u GLIBCXX20\u CONSTEXPR在使用C++20或更高版本时扩展为CONSTEXPR,除此之外没有其他扩展 \u GLI

最近我在查看std::array头文件时,发现了一些wierd定义,例如_GLIBCXX20 _CONSTEXPR或_GLIBCXX17(u CONSTEXPR)等。为什么需要它们呢?

\u GLIBCXX20(u CONSTEXPR
在使用C++20或更新版本时扩展为
constepr


\u GLIBCXX17\u CONSTEXPR
与之类似,但对于C++17而言。

\u GLIBCXX20\u CONSTEXPR
在使用C++20或更高版本时扩展为
CONSTEXPR
,除此之外没有其他扩展


\u GLIBCXX17\u 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

示例,C++容器库STD::数组< /P>

reference at( size_type pos ); (until C++17)
constexpr reference at( size_type pos ); (since C++17)
在头文件中看起来像

_GLIBCXX17_CONSTEXPR reference at( size_type pos ); 

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

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

C++11之前没有constexpr API

示例,C++容器库STD::数组< /P>

reference at( size_type pos ); (until C++17)
constexpr reference at( size_type pos ); (since C++17)
在头文件中看起来像

_GLIBCXX17_CONSTEXPR reference at( size_type pos ); 

这个问题只能由编写这些定义的人来回答,或者通过读取头文件的其余部分并查看它们所做的事情来回答。”…以下划线开头,后跟大写字母的标识符是保留的;[对于实现]…“我读过文件,在其中它们定义了“#如果uu cplusplus>一些数字定义了_GLIBCXX17_CONSTEXPR CONSTEXPR“所以这对我来说毫无意义。我的第一个想法是,它只用于知道这个头是什么时候写的。所以,这就是为什么我在这里要求它仔细学习您从标准库标题中学到的课程。它们是由熟悉其编译器和使用头的平台的人编写的,他们将执行各种令人讨厌的操作,以使库在编译器和平台约束下尽可能高效地运行。他们知道什么时候他们可以沉迷于一些你可能无法想当然的未定义行为。这个问题只能由编写这些定义的人来回答,或者通过阅读头文件的其余部分并查看它们所做的事情来回答。”…保留以下划线开头,后跟大写字母的标识符;[对于实现]…“我已经阅读了他们定义的文件,它类似于“#if u cplusplus>一些数字定义_GLIBCXX17_CONSTEXPR CONSTEXPR”因此,这对我来说没有任何意义。我的第一个想法是,它只用于知道这个标题是何时编写的。因此,我在这里问它,请仔细阅读从标准库标题中学习到的课程。这些标题是由熟悉其编译器和使用这些标题的平台的人编写的,并且将被执行在编译器和平台约束下,他们知道什么时候他们可以沉溺于一些你可能不会想当然的未定义的行为。Crisp-值得一提:Crisp-值得一提:是的!这正是我想要的,谢谢!是的!这是exa我一直在找,谢谢你!