首页 > 其他分享 >[Lang] 函数模板

[Lang] 函数模板

时间:2024-08-18 16:04:30浏览次数:8  
标签:Lang 类型转换 cout int template 模板 函数

[Lang] 函数模板

1. 自动类型推导和显示指定类型

  • 自动类型推导不能进行隐式类型转换。
  • 显式指定类型可以进行隐式类型转换。但前提是函数模板的参数必须按值传递,因为按引用传递不支持隐式类型转换。
#include<iostream>
using namespace std;

template <typename T>
T myAdd(T a, T b)
{
    return a + b;
}

int main()
{
    int a = 10;
    char b = 'a';

    // cout << myAdd(a, b) << endl;
    // 自动类型推导不能进行隐式类型转换

    cout << myAdd<int>(a, b) << endl;
    // 显式指定类型可以进行隐式类型转换
    // 但前提是函数模板的参数必须按值传递,因为按引用传递不支持隐式类型转换

    return 0;
}
107

2. 普通函数和函数模板调用优先级

  • 普通函数优先级高于函数模板。
  • 除非函数模板存在比普通函数更好的匹配(不需要隐式类型转换),或者使用空模板参数列表强制调用函数模板。
#include<iostream>
using namespace std;

template <typename T>
T myAdd(T &a, T &b)
{
    cout << "函数模板调用"  << endl;
    return a + b;
}

int myAdd(int &a, int &b)
{
    cout << "普通函数调用" << endl;
    return a + b;
}

int main()
{
    int a = 10, b = 20;

    cout << myAdd(a, b) << endl;
    // 普通函数优先级高于函数模板

    char c = '1', d = '2';
    cout << myAdd(c, d) << endl;
    // 除非函数模板存在比普通函数更好的匹配(不需要隐式类型转换)

    cout << myAdd<>(a, b) << endl;
    // 或者使用空模板参数列表

    return 0;
}
普通函数调用
30
函数模板调用
c
函数模板调用
30

3. 函数模板完全特化

#include <iostream>
using namespace std;

// 通用函数模板
template <typename T>
void func(T param) {
    cout << "Generic template function: " << param << endl;
}

// 针对 int 类型的完全特化
template <>
void func(int param) {
    cout << "Specialized template function for int: " << param << endl;
}

int main() {
    func(42);         // 调用特化的 int 版本
    func(3.14);       // 调用通用模板版本
    func("Hello");    // 调用通用模板版本

    return 0;
}
Specialized template function for int: 42
Generic template function: 3.14
Generic template function: Hello

标签:Lang,类型转换,cout,int,template,模板,函数
From: https://www.cnblogs.com/yaoguyuan/p/18365734

相关文章

  • Unity 常用的生命周期函数
    publicclassMonoLife:MonoBehaviour{  privatevoidAwake()  {    print("Awake:只要物体显示状态为true则调用一次");  }  privatevoidOnEnable()  {    print("OnEnable:每一次物体启用时调用");  }  private......
  • 开窗函数的另外一种方式
       https://leetcode.cn/problems/game-play-analysis-iii/solutions/286941/chao-xiang-xi-tu-jie-zi-lian-jie-by-piajun===如下第一种最简单的开窗selectplayer_id,event_date,sum(games_played)over(partitionbyplayer_idorderbyevent_date......
  • C语言 之 strlen、strcpy、strcat、strcmp字符串函数的使用和模拟实现
    文章目录strlen的使用和模拟实现函数的原型strlen模拟实现:方法1方法2方法3strcpy的使用和模拟实现函数的原型strcpy的模拟实现:strcat的使用和模拟实现函数的原型strcat的模拟实现:strcmp的使用和模拟实现函数的原型strcmp的模拟实现本章的内容主要讲解这4个与字符......
  • Codesy是使用加法函数实现加法运算示例
    Codesys的函数比较常用,需要熟练掌握,下面介绍如何通过函数实现加法运算:首先添加对象,添加POU函数名改为Add1,类型函数,返回类型int;Add1里面的定义如下:FUNCTIONAdd1:INTVAR_INPUT   In1:INT;   In2:INT:=1;END_VARVAREND_VAR程序如下:Add1:=In1+In2;然后看......
  • 线段树模板,洛谷原题P3373
    线段树区间乘、加,范围求和,QWQ原题#include<bits/stdc++.h>#definePIIpair<int,int>#defineintlonglong#defineDBdoublenamespaceFastIO{ inlineintread(intMOD,int&ret){ charch=getchar();intngtv=1; if(MOD==0){while(ch<&#......
  • 【C语言篇】数组和函数的实践:扫雷游戏(附源码)
    文章目录前言扫雷游戏的分析和设计扫雷游戏的功能说明游戏的分析和设计文件结构设计扫雷游戏的代码实现初始化棋盘打印棋盘布置雷排查雷扫雷游戏的拓展前言源码在最后扫雷游戏的分析和设计经典扫雷游戏扫雷游戏的功能说明使⽤控制台实现经典的扫雷游戏游戏可......
  • 【C语言】内存函数
    memcpy使用和模拟实现void*memcpy(void*destination,constvoid*source,size_tnum);介绍:•函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。•这个函数在遇到‘\0’的时候并不会停下来。•如果source和destinati......
  • 1-1 函数四大性质
    1-1函数四大性质3.单调性......
  • Excel vba自定义函数公式智能提示
    效果如下第一步下载,智能提示显示xll文件Releases·Excel-DNA/IntelliSense(github.com)xll文件报病毒解决办法默认情况下,Excel正在阻止不受信任的XLL加载项-Microsoft支持 第二步,加载xll文件,xll文件放在excel插件目录:%appdata%\Microsoft\AddIns 第三步编写e......