非成员函数模板是 C++0x 的一部分吗begin(container)
?end(container)
如果是这样,它们位于哪个头文件中?
问问题
950 次
1 回答
8
是的,但正如swap
在不同地方定义并依赖于 ADL 一样,begin
和也是如此end
。“通用”版本定义在<iterator>
:
// 24.6.5, range access:
template <class C> auto begin(C& c) -> decltype(c.begin());
template <class C> auto begin(const C& c) -> decltype(c.begin());
template <class C> auto end(C& c) -> decltype(c.end());
template <class C> auto end(const C& c) -> decltype(c.end());
template <class T, size_t N> T* begin(T (&array)[N]);
template <class T, size_t N> T* end(T (&array)[N]);
另请注意,24.6.5 说:
除了通过包含
<iterator>
标头可用之外,24.6.5 中的功能模板在包含以下任何标头时可用:<array>
,<deque>
,<forward_list>
,<list>
,<map>
,<regex>
,<set>
,<string>
,<unordered_map>
,<unordered_set>
和<vector>
.
于 2011-07-30T10:48:00.197 回答