100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > C++ Primer 5th笔记(chap 16 模板和泛型编程)定义

C++ Primer 5th笔记(chap 16 模板和泛型编程)定义

时间:2023-01-24 17:15:47

相关推荐

C++ Primer 5th笔记(chap 16 模板和泛型编程)定义

1. 函数模板

template <typename T> int compare (const T &v1,const T &v2){if (v1 < v2) return -1;if (v2 < v1) return 1;return 0;}

编译器会实例化多个版本的模板实例

cout << compare(1, 0) << endl;// T为int,实例化出int compare (const int&, const int&)vector<int> vec1{1, 2,3}, vec2{4, 5,6};cout << compare (vec1, vec2) << endl; // T为vector<int>,实例化出int compare (const vector<int>&, const vector<int>&)

1.1 类型参数type parameter

用typename或class标识,可以是函数的参数或函数的返回类型

eg.

//正确:返回类型和参数类型相同template. <typename T> T foo(T* p){Ttmp=*p;//tmp的类型将是指针p指向的类型//.return tmp;}

1.2 非类型模板参数nontype parameter

当一个模板被实例化时,非类型参数被一个用户提供的或编译器推断出的值所代替。这些值必须是常量表达式,从而允许编译器在编译时实例化模板。

eg.

template<unsigned N,unsigned M>int compare (const char (&p1) [N],const char (&p2) [M]){return strcmp(p1, p2) ;}compare ("hi","mom" );->编译器的版本:int compare (const char (&p1) [3],const char(&p2) [4])

一个非类型参数表示一个值而不是类型

可以是一个整型、一个指向对象或函数类型的指针或(左值)引用。

绑定到非类型整型参数的实参必须是一个常量表达式。

绑定到指针或引用非类型参数的实参必须具有静态的生存期,不能用一个普通(非static)局部变量或动态对象作为指针或引用非类型模板参数的实参。

不能用一个普通(非static)局部变量或动态对象作为指针或引用非类型模板参数的实参。指针参数也可以用nullptr或一个值为0的常量表达式来实例化。

在模板定义内,模板非类型参数是一个常量值。在需要常量表达式的地方,可以使用非类型参数,eg. 指定数组大小。

1.2 inline和constexpr的函数模板

函数模板可以声明为inline或constexpr的,如同非模板函数一样。 inline 或constexpr说明符放在模板参数列表之后,返回类型之前:

//正确: inline说明符跟在模板参数列表之后template <typename T> inline T min (const T&,const T&) ;//错误: inline说明符的位置不正确inline template <typename T> T min(const T&,const T&) ;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。