第二个模板比第一个模板更"特殊"
所以编译器选择了第二个
【 在 wangkk2012 (wangkk2012) 的大作中提到: 】
: 标 题: 求助:STL 问题
: 发信站: 水木社区 (Wed Mar 10 12:38:05 2021), 站内
:
: 大家好,最近在阅读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;
: }
: --
:
: ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 219.142.254.*]
--
FROM 171.83.6.*