Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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++ glibcxx函数需要和glibcxx需要有效范围宏如何工作?_C++_Stl_Macros_Accumulate - Fatal编程技术网

C++ glibcxx函数需要和glibcxx需要有效范围宏如何工作?

C++ glibcxx函数需要和glibcxx需要有效范围宏如何工作?,c++,stl,macros,accumulate,C++,Stl,Macros,Accumulate,请您向我解释一下,它们是如何工作的,它们在做什么?当定义了\u GLIBCXX\u概念检查时,也是这样 #define __glibcxx_function_requires(...) # define __glibcxx_requires_valid_range(_First,_Last) #定义u_uglibcxx_函数u需要(…)\ __gnu_cxx::u函数_需要(); 因此,您发布的代码: #define __glibcxx_function_requires(...)

请您向我解释一下,它们是如何工作的,它们在做什么?

当定义了
\u GLIBCXX\u概念检查时,也是这样

#define __glibcxx_function_requires(...)
# define __glibcxx_requires_valid_range(_First,_Last)
#定义u_uglibcxx_函数u需要(…)\
__gnu_cxx::u函数_需要();
因此,您发布的代码:

#define __glibcxx_function_requires(...)                                 \
         __gnu_cxx::__function_requires< __gnu_cxx::__VA_ARGS__ >();
\u glibcxx\u函数\u需要(\u InputIteratorConcept)
决议如下:

__glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
\uuuu gnu\ucxx::\uu函数需要();
其中内联到:

__gnu_cxx::__function_requires< _InputIteratorConcept<_InputIterator> >();
void(_InputIteratorConcept::*ux)(_IsUnused=&_InputIteratorConcept::u约束;
这将强制实例化
\u InputIterator Concept::\u约束
,当
\u InputIterator
与迭代器不相似时,它使用
类型定义
中断编译

\u glibcxx\u需要有效范围
根据迭代器类型,使用类似的技术调用函数。适当时(足够快),它将断言
\uuu last
\uu first
之后

__gnu_cxx::__function_requires< _InputIteratorConcept<_InputIterator> >();
void (_InputIteratorConcept<_InputIterator>::*__x)() _IsUnused = &_InputIteratorConcept<_InputIterator>::__constraints;