gpt4 book ai didi

c++ - __glibcxx_function_requires 和 __glibcxx_requires_valid_range 宏是如何工作的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:24:38 24 4
gpt4 key购买 nike

template<typename _InputIterator, typename _Tp, typename _BinaryOperation>
inline _Tp
accumulate(_InputIterator __first, _InputIterator __last, _Tp __init, _BinaryOperation __binary_op)
{
// concept requirements
__glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
__glibcxx_requires_valid_range(__first, __last);

for (; __first != __last; ++__first)
__init = __binary_op(__init, *__first);
return __init;
}

我查看了 STL 库中 accumulate 函数的定义。这里我找到了两个宏__glibcxx_function_requires和__glibcxx_requires_valid_range,它们的定义是这样的:

#define __glibcxx_function_requires(...)
# define __glibcxx_requires_valid_range(_First,_Last)

请你解释一下它们是如何工作的以及它们在做什么?

最佳答案

_GLIBCXX_CONCEPT_CHECKS被定义了,这个也是。

#define __glibcxx_function_requires(...)                                 \
__gnu_cxx::__function_requires< __gnu_cxx::__VA_ARGS__ >();

所以你发布的代码:

__glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)

解决这个问题:

__gnu_cxx::__function_requires< _InputIteratorConcept<_InputIterator> >();

内联到:

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

这会强制实例化 _InputIteratorConcept<_InputIterator>::__constraints ,它使用 typedef_InputIterator 时中断编译不像迭代器。

__glibcxx_requires_valid_range使用类似的技术调用 one of several函数,取决于迭代器类型。在适当的时候(并且足够快),它会断言 __last__first 之后

关于c++ - __glibcxx_function_requires 和 __glibcxx_requires_valid_range 宏是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15935471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com