首页 > 编程语言 >C++模板显示指定类型时使用引用遇到的问题

C++模板显示指定类型时使用引用遇到的问题

时间:2023-11-06 23:33:57浏览次数:35  
标签:ab int C++ char add 引用 类型 模板 b1

1.问题

这里我想让模板函数接收int和char类型的参数,并进行相加,显示指定参数类型为int。
第一个调用理论上会自动将char类型强转成int类型,后进行相加;
第二个调用理论上会自动将int类型强转成char类型,后进行相加;
但是报错No matching function for call to 'add_ab'

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

int a1 = 1;
char b1 = 'b';
cout << add_ab<int>(a1, b1) << endl;
cout << add_ab<char>(a1, b1) << endl;

2.解决

T &A,T &B 错误的原因是因为传入的是地址(隐式指针),该指针对应的b的内存区域还是char类型 ;
你告诉编译器用int 类型 但是实际上 return a + b;中的 b 会自动转为*b(引用),这里的*b还是char 所以错误
这里使用T add_ab(T a, T b);值传递即可。

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

标签:ab,int,C++,char,add,引用,类型,模板,b1
From: https://www.cnblogs.com/trmbh12/p/17814067.html

相关文章

  • 模板特化遇到的问题--多参数特化
    1.问题我想比较一个int类型和char类型(将char类型-'0')后进行比较,写了如下代码,但是报错 [Error]template-id'Compare_ab<>'for'boolCompare_ab(int&,char&)'doesnotmatchanytemplatedeclaration代码如下template<classT>boolCompare_ab(T......
  • 【躬行】-深度缓冲和模板缓冲是怎么存储的?
    概述最近在工作中需要实现一个功能,用到了模板测试。但奇怪的是,模板测试竟然不起作用!在解决问题的过程中,发现了一些有趣的知识点。通过本文,可以了解在unity中,深度缓冲和模板缓冲到底是怎么存储的。测试环境的搭建Unity版本:2021.3.16f1URP版本:12.1.8RenderDoc:1.29需要注意的是......
  • C++ 入门防爆零教程(上册)
    ##C++入门防爆零教程(上册)###### C++IntroductoryExplosionProofZeroTutorial(Volume$1$)编写者:美公鸡(洛谷账号:beautiful_chicken233,电话:$155****7747$,如有需要请随时联系)编写时间:$2023.10.5\sim?$地址:湖南省长沙市雨花区明升异城$11$栋$3902$出版社:美公鸡......
  • 编译器Dev-C++的安装及使用
    编译器Dev-C++的安装及使用1.Dev-C++的安装下载链接:https://acm.nyist.edu.cn/file/2/Dev-Cpp_5.11_TDM-GCC_4.9.2_Setup.exe​下载​:点击此处下载安装点击安装包选择英文点击ok选择我同意无脑选下一步路径改不改都可占不了多少空间等待安装......
  • C++二维数组输出3
    题目描述输入一个整数\(N\),输出一个N行N列的二维矩阵,矩阵中的元素按列用\(1\)~\(N\)\(∗\)\(N\)蛇形填充。输入格式一个整数\red{N}\(N\)(\(N<=10\))输出格式输出N行N列的矩阵,元素之间用一个空格隔开,行末不要有多余的空格。样例输入数据3输出数据123654789......
  • C++交换a和b的值
    题目描述交换\(a\)和\(b\)的值输入格式一行,两个整数\(a\),\(b\)。输出格式一行,两个整数\(b\),\(a\),两个整数之间用空格隔开。样例输入样例51输出样例15数据范围与提示\(a\)和\(b\)保证在int范围内。\(Code\)#include<iostream>usingnamespacestd;i......
  • C++U4-03-递推1
    上节课作业部分(点击跳转)加法原理和乘法原理递推的概念 练习题1、[兔子数列]【算法分析】初始条件:第1个月有1对兔子,第2个月有1对兔子。当大于等于3个月时:第i个月兔子数=第i−1个月兔子数+第i−2个月兔子数。【参考代码】include<iostrea......
  • 计算机配置 — 管理模板 — Windows 组件 — 数据收集和预览版本 对应 注册表 位置
    @echooff::切换对预览体验成员内部版本的用户控制regadd"HKLM\SOFTWARE\Policies\Microsoft\WindowsPreviewBuilds"/vAllowBuildPreview/tREG_DWORD/d1/f::允许商业数据管道regadd"HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection"/vCommerc......
  • 二叉查找树的实现C/C++
    二叉查找树是一种关键字有序存放的二叉树。在不含重复关键字的二叉查找树中,关键字"较小"的节点一定在关键字“较大”的节点的左子树中,“较小”一般可以由内值类型的<运算符来实现,或由重载了<运算符的类类型的<运算符来实现。“较小”的概念可以根据我们的需要有不同的实现。本文实......
  • C++中如何返回数组类型数据
    错误示范:int*test01(){ intdata[3]={1,2,3}; returndata;}intmain(){ int*result=test01(); for(inti=0;i<3;i++){ cout<<result[i]<<'\t'; }}正确示范:int*test01(){// intdata[3]={1,2,3}; int*da......