3.普通函数与函数模板的调用规则

news/发布时间2024/5/14 5:59:57

一.规则总述:

-如果函数模板和普通函数都可以实现,优先调用普通函数
-可以通过空模板参数列表来强制调用函数模板
-函数模板也可以发生重载
-如果函数模板可以产生更好的匹配,优先调用函数模板

(1).如果函数模板和普通函数都可以实现,优先调用普通函数

#include<iostream>
using namespace std;//普通函数
void Print(int a, int b)
{cout << "调用的普通函数" << endl;
}//函数模板
template <class T>
void Print(T a, T b)
{cout << "调用的模板" << endl;
}void test()
{int a = 10, b = 20;//如果函数模板和普通函数都可以实现,优先调用普通函数Print(a, b);
}int main()
{test();return 0;
}

运行结果

调用的普通函数

(2)可以通过空模板参数列表来强制调用函数模板

#include<iostream>
using namespace std;void Print(int a, int b)
{cout << "调用的普通函数" << endl;
}template <class T>
void Print(T a, T b)
{cout << "调用的模板" << endl;
}void test()
{int a = 10, b = 20;//通过空模板参数列表,强制调用函数模板Print<>(a, b);
}int main()
{test();return 0;
}

运行结果

调用的模板

 

(3)函数模板也可以发生重载

#include<iostream>
using namespace std;void Print(int a, int b)
{cout << "调用的普通函数" << endl;
}template <class T>
void Print(T a, T b)
{cout << "调用的模板" << endl;
}template <class T>
void Print(T a, T b, T c)
{cout << "调用重载的模板" << endl;
}void test()
{int a = 10, b = 20, c = 30;//函数模板也可以发生重载Print(a, b, c);Print<>(a, b, c);
}int main()
{test();return 0;
}

运行结果

调用重载的模板
调用重载的模板


(4)如果函数模板可以产生更好的匹配,优先调用函数模板

#include<iostream>
using namespace std;void Print(int a, int b)
{cout << "调用的普通函数" << endl;
}template <class T>
void Print(T a, T b)
{cout << "调用的模板" << endl;
}template <class T>
void Print(T a, T b, T c)
{cout << "调用重载的模板" << endl;
}void test()
{char a = 'a';char b = 'b';//如果函数模板可以产生更好的匹配,优先调用函数模板Print(a, b);
}int main()
{test();return 0;
}

运行结果

调用的模板

        解释:在这里,变量为字符型,普通函数传入字符型变量可以发生隐式转换,模板函数可以自动匹配参数类型但是,普通函数要发生类型转换,模板函数不需要,显然模板函数的调用要更适合,因此在这里的结果是调用了模板函数
    

二.总结:

        既然提供了函数模板,最好就不要提供普通函数,否则容易出现二义性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/GbTo/2309.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

css知识:盒模型盒子塌陷BFC

1. css盒模型 标准盒子模型&#xff0c;content-box 设置宽度即content的宽度 width content 总宽度content&#xff08;width设定值&#xff09; padding border IE/怪异盒子模型&#xff0c;border-box width content border padding 总宽度 width设定值 2. 如何…

openai chatGPT 原理通俗介绍

引言 近年来&#xff0c;随着深度学习技术的不断发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域取得了长足的进步。ChatGPT&#xff08;Generative Pre-trained Transformer&#xff09;作为一种先进的语言生成模型&#xff0c;在各类对话系统和智能助手中得到…

Ansible yum模块 主要用于软件安装

目录 选项 实例 安装一个tree实例卸载一个 tree 选项 name   #所安装的包的名称 state  #present—>安装&#xff0c; latest—>安装最新的, absent—> 卸载软件。 update_cache  #强制更新yum的缓存 conf_file  #指定远程yum安装时所依赖的配置文件&…

Linux常见的指令

目录 01. ls 指令02. pwd命令03. cd 指令04. touch指令05.mkdir指令&#xff08;重要&#xff09;&#xff1a;06.rmdir指令 && rm 指令&#xff08;重要&#xff09;&#xff1a;07.man指令&#xff08;重要&#xff09;&#xff1a;08.cp指令&#xff08;重要&#x…

学习笔记-Git

Git 问题一描述解决方法注意事项 问题一 描述 在commit和push的时候因为网络太慢了中途强行关闭了进程&#xff0c;而push的内容因为文件过大导致无法正常push 按照原本的流程在push的时候会提示失败&#xff0c;并且需要在解决了大文件之后重新push 而因为中途中断了&#x…

flink state原理,TTL,状态后端,数据倾斜一文全

flink state原理 1. 状态、状态后端、Checkpoint 三者之间的区别及关系&#xff1f;2 算子状态与键控状态的区别2.1 算子状态2.2 键控状态2.3 算子状态api2.4 键控状态api 3 HashMapStateBackend 状态后端4 EmBeddedRocksDbStateBackend 状态后端5 状态数据结构介绍5.1 算子状态…

计算机网络-局域网和城域网(一)

1.什么是局域网&#xff1f; 单一机构所拥有的专用计算机网络&#xff0c;中等规模地理范围&#xff0c;实现多种设备互联、信息交换和资源共享。 2.逻辑链路控制LLC&#xff1a; 目的是屏蔽不同的介质访问控制方法&#xff0c;以向高层&#xff08;网络层&#xff09;提供统…

并发编程入门指南

文章目录 并发编程进程和线程的区别并发和并行的区别创建线程的方式线程之间的状态&#xff0c;状态之间的转换新建三个线程&#xff0c;如何保证按顺序执行wait方法和sleep的区别如何停止一个正在运行的线程synchronized关键字底层原理Monitor属于重量级锁&#xff0c;了解过锁…

拿捏c语言指针(中)

前言 书接上回 拿捏c语言指针&#xff08;上&#xff09; 此篇主要讲解的是指针与数组之间的爱恨情仇&#xff0c;跟着我的脚步一起来看看吧~ 创造不易&#xff0c;可以帮忙点点赞吗 如有差错&#xff0c;欢迎指出 理解数组名 数组名是首元素地址 例外 1.sizeof&#xff0…

http和https的区别(简述)

HTTP&#xff08;HyperText Transfer Protocol&#xff09;和HTTPS&#xff08;HTTP Secure&#xff09;都是用于在客户端和服务器之间传输数据的协议&#xff0c;但它们在安全性方面有重要的区别。 1.HTTP: 概述&#xff1a; HTTP是一种用于传输超文本的协议&#xff08;超文…

【计算机网络】socket 网络套接字

网络套接字 一、端口号1. 认识端口号2. socket 二、认识TCP协议和UDP协议1. TCP协议2. UDP协议 三、网络字节序四、socket 编程1. socket 常见API2. sockaddr 结构3. 编写 UDP 服务器&#xff08;1&#xff09;socket()&#xff08;2&#xff09;bind()&#xff08;3&#xff0…

二、Vue组件化编程

2、Vue组件化编程 2.1 非单文件组件 <div id"root"><school></school><hr><student></student> </div> <script type"text/javascript">//创建 school 组件const school Vue.extend({template: <div&…

HTML+CSS+JS:花瓣登录组件

效果演示 实现了一个具有动态花朵背景和简洁登录框的登录页面效果。 Code <section><img src"./img/background.jpeg" class"background"><div class"login"><h2>Sign In</h2><div class"inputBox"…

在面试中,如何回复擅长 Vue 还是 React

目录 一、Vue.JS 二、React 三、Vue和React的区别 四、前端开发框架 一、Vue.JS Vue.js&#xff08;通常简称为Vue&#xff09;是一个用于构建用户界面的开源JavaScript框架。它采用了MVVM&#xff08;Model-View-ViewModel&#xff09;的架构模式&#xff0c;通过数据驱动…

爬虫知识--01

爬虫介绍 # 爬虫的概念&#xff1a; 通过编程技术(python:request,selenium)&#xff0c;获取互联网中的数据(app&#xff0c;小程序&#xff0c;网站)&#xff0c;数据清洗(xpaht&#xff0c;lxml)后存到库中(mysql&#xff0c;redis&#xff0c;文件&#xff0c;excel&#x…

vue2--多设备访问本地调试项目

背景 在vue2开发阶段&#xff0c;为了更好的和小伙伴对项目进行讨论&#xff0c;需要让小伙伴可以看到自己本地的项目。 方案 修改vue2项目配置 在本地进行项目调试时&#xff0c;都是使用的127.0.0.1:8080&#xff0c;为了让局域网中的其他小伙伴可以访问&#xff0c;需要…

解决IDEA搜不到插件

File -> Settings -> Plugins https://plugins.jetbrains.com/ 完成以上操作即可搜到插件

面试经典150题——赎金信

我知道可能会粉身碎骨&#xff0c;但我还是热爱那片蓝天 1. 题目描述 2. 题目分析与解析 2.1 思路一 这个题目还是很直观的&#xff0c;就是判断 magazine 的字符是包含所有的ransomNote中的字符&#xff0c;注意magazine 中的每个字符只能在 ransomNote 中使用一次。题目中…

中科院一区论文复现,改进蜣螂算法,Fuch映射+反向学习+自适应步长+随机差分变异,MATLAB代码...

本期文章复现一篇发表于2024年来自中科院一区TOP顶刊《Energy》的改进蜣螂算法。 论文引用如下&#xff1a; Li Y, Sun K, Yao Q, et al. A dual-optimization wind speed forecasting model based on deep learning and improved dung beetle optimization algorithm[J]. Ener…

ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(二)

在我们开始探索人工智能的世界时&#xff0c;了解如何与之有效沉浸交流是至关重要的。想象一下&#xff0c;你手中有一把钥匙&#xff0c;可以解锁与OpenAI的GPT模型沟通的无限可能。这把钥匙就是——正确的提示词&#xff08;prompts&#xff09;。无论你是AI领域的新手&#…
推荐文章