《C++Primer》读书笔记--函数模板

本文深入探讨了C++函数模板的使用方法,包括如何通过模板极大简化代码重用,模板实例化的过程,以及如何避免模板使用时的常见错误。同时介绍了函数模板的重载规则,帮助开发者更高效地利用模板特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板!终于到这里了!C++的精髓!

1.函数模板:

// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

template <typename T>
void compare(const T &v1, const T &v2)
{
	if (v1 > v2)
		cout<<"v1 > v2"<<endl;
	else if (v1 == v2)
		cout<<"v1 = v2"<<endl;
	else
		cout<<"v1 < v2"<<endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
	compare(1,2);
	compare(1.2,1.1);
	getchar();
	return 0;
}

模板极大的方便了我们编程,如果使用函数重载,写N多种重载,这里只要写一次就可以了。当我们使用函数时,编译器会根据我们给的参数,实例化一个函数,供我们调用(这个过程发生在编译时),编译器产生的版本通常被成为模板的实例。


定义模板时,模板有一个模板类型参数,该参数可以在模板函数中使用,即一种类型说明符,用于返回值类型或者参数类型等。

模板的错误在创建时只能判断一些拼写的错误,真正的错误只有在实例化时才能被检查出来。


当我们给模板传递参数时,要明确模板中的操作改类型的参数是否支持,这一点是调用者应该注意的。(比如我们使用一个进行“+”操作的模板,但是该类型没有对"+"的运算符操作,实例化时会发生错误)


注:函数模板的定义和声明通常都放在头文件中


模板重载:

1.当同样的函数,有一个非模板的重载时,会调用非模板的版本。

2.如果没有直接可调用的函数,而有函数模板,会实例化这些模板中最特例化的一个版本。

3.如果都没有,出错!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值