您的位置:首页 > 编程语言 > C语言/C++

C++primer学习:模板编成(5):模板实参推断{1}

2015-11-03 22:00 316 查看

在向函数模板传递实参的时候,顶层const会被忽略,在其他类型转换中,能用于模板参数转换的有如下两项.

[1]const转换.允许将一个非const对象的引用传递给一个const指针或者引用.

[2]数组或者函数向指针的转换.

注意:如果函数中的参数不是模板参数,那么它的类型转换就与普通函数的转换是一样的

#

template <class T> int compare(const T&, const T&)
//         compare("hi", "world");
//  不正确,推导得出的T分别是] char[3] , char[6]
//       compare("bye", "dad");
//   正确,类型都是char[6];


======================================================================================

函数模板显示实参

有些时候编译器不能够直接通过实参推断函数模板的参数或者编译器推断出来的可能会有冲突,因此需要显式的定义模板参数。

double a = 3,b = 4;
compare<int>(a,b)


======================================================================================

尾置类型与类型转换.

当我们需要用户确定返回类型的时候,用显示模板是很有效.但是其他情况会增加不必要的负担.比如在接受一对迭代器并返回序列中一对元素的引用.

template<.typename IT>
auto func(IT beg,It end)->decltype(*beg)
{
return *beg;
}


如果需要去掉引用,可以用定义在标准库的remove_reference来获得元素的类型.

[练习]重新定义一个sum,确保可以容纳加法结果

template<typename T>
auto sum(const T& lhs, const T&rhs)->decltype(lhs + rhs)
{
return lhs + rhs;
}
int main()
{
auto s = sum(1234567891239, 123456789123);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: