大家好,最近在阅读C++的STL代码,遇到了一个模板调用的问题,调用关系如下
1、mystl::copy(arr1, arr1 + 5, act);
2、unchecked_copy(first, last, result);
3、uncheck_copy 该调用哪一个
---跟调进入的是调用2,但是不是特别理解,求助诸位大神
TEST(copy_test)
{
int arr1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int exp[5], act[5];
std::copy(arr1, arr1 + 5, exp);
mystl::copy(arr1, arr1 + 5, act);
EXPECT_CON_EQ(exp, act);
std::copy(arr1 + 5, arr1 + 10, exp);
mystl::copy(arr1 + 5, arr1 + 10, act);
EXPECT_CON_EQ(exp, act);
}
template <class InputIter, class OutputIter>
OutputIter copy(InputIter first, InputIter last, OutputIter result)
{
return unchecked_copy(first, last, result); //为什么会调用 ---调用2这个函数,不是调用1
}
//调用1
template <class InputIter, class OutputIter>
OutputIter unchecked_copy(InputIter first, InputIter last, OutputIter result)
{
return unchecked_copy_cat(first, last, result, iterator_category(first));
}
//调用2
template <class Tp, class Up>
typename std::enable_if <
std::is_same<typename std::remove_const<Tp>::type, Up>::value &&
std::is_trivially_copy_assignable<Up>::value,
Up * >::type
unchecked_copy(Tp *first, Tp *last, Up *result)
{
const auto n = static_cast<size_t>(last - first);
if (n != 0)
std::memmove(result, first, n * sizeof(Up));
return result + n;
}
--
FROM 219.142.254.*