gpt4 book ai didi

c++ - std::begin() 如何用于内置类型?

转载 作者:太空狗 更新时间:2023-10-29 23:39:27 25 4
gpt4 key购买 nike

假设我在使用 std::begin 的地方有以下代码行。

int myint[] ={1,2,3,4,5,6,7,8,9};
std::find(begin(myint),end(myint),9);

现在 std::begin 声明如下。

template< class C > 
auto begin( C& c ) -> decltype(c.begin());

我无法理解,它是如何工作的?。据我所知,std::begin 的返回类型是 decltype(c.begin()) ,当 C 作为整数数组传递时,不会有任何带有整数的 begin 函数。所以 c.begin() 应该是无效的?

最佳答案

事实并非如此。您缺少的是编译器为内置数组选择的另一个版本的开始/结束对,它看起来大致如下:

template <typename T, std::size_t N>
T* begin(T (&ar)[N]) {
return ar;
}
template <typename T, std::size_t N>
T* end(T (&ar)[N]) {
return ar + N;
}

这些函数为您提供指向普通数组开头和结尾的指针。 SFINAE 将调用成员 c.begin() 的版本从重载决议中删除。

关于c++ - std::begin() 如何用于内置类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34850810/

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