首页 > 编程语言 >c++decltype解决模板类型

c++decltype解决模板类型

时间:2023-02-22 16:32:20浏览次数:56  
标签:返回 decltype xpy c++ xx 类型 模板 xytype

1、在模板函数中,通过对模板类型的运算后,并不能确定返回的类型。

template<class T1,class T2>

void ft(T1 x,T2 y){
? xpy = x+y;
}

x+y的返回值是无法确定的,可以使用decltype来实现。

decltype(x+y) xpy = x+y;

decltype(x+y)的意思就是返回类型就是x+y的结果类型。

double xx = 4.4;
decltype(xx) w = xx; //w是double类型

如果想把另一个变量指定为xx类型的引用,就需要再加个括号。

decltype((xx)) r = xx; //r就是double &类型

如果需要多次声明,可以结合typedef。

{

typedef decltype(x+y) xytype;
xytype xpy = x+y;
xytype arr[10];
...

}

2、如果是函数返回类型不确定,是没办法使用decltype。

decltype(x+y) ft(T1 x,T2 y)

这样是不行的,此时还未声明参数x和y,它们不在作用域内。必须在声明参数后使用decltype。

有一种语法可以把返回类型放入到参数定义的后面。

auto ft(T1 x,T2 y) -> decltype(x+y)

auto是一个占位符,表示后置返回类型提供的类型,-> 后面跟着decltype(x+y)就是需要返回的类型。

标签:返回,decltype,xpy,c++,xx,类型,模板,xytype
From: https://blog.51cto.com/u_3764469/6079228

相关文章

  • C++黑马程序员——P124-126. 赋值 关系运算符重载;函数调用运算符重载
    P124.类和对象——C++运算符重载——赋值运算符重载P125.类和对象——C++运算符重载——关系运算符重载P126.类和对象——C++运算符重载——函数调用运算符重载P124......
  • .NetCore自定义模板,发布Nuget
    1.创建模板项目框架             2.创建模板文件在项目文件夹根目录创建.template.config文件夹,在文件夹下创建新的文件:template.json  ......
  • Builder设计模式,模板设计模式,Adapter设计模式笔记
    因为这三个都比较偏代码,所以都是以贴出运用这些模式的代码,然后通俗总结各个设计模式。Builder设计模式Builder设计模式设计模式列子代码如下:/***CreatedbyhcDarrenon2......
  • C++编程思想
    命名空间所有的标准C++标准库都封装在std命名空间中include<iostream.h>相当于:#include<iostread>usingnamespacestd;C++输出格式控制voidtest(){cout<<......
  • 如何使用DevEco Studio创建Native C++应用
     简介本篇主要介绍如何使用DevEcoStudioforOpenAtomOpenHarmony(以下简称“OpenHarmony”)创建一个NativeC++应用。应用采用“NativeC++”模板,实现了通过Node-AP......
  • C++反射机制实现
    直接上代码#include<iostream>#include<map>classBase{public:virtualvoidhello()const=0;};classA:publicBase{public:A(){......
  • C/C++书籍借阅系统[2023-02-22]
    C/C++书籍借阅系统[2023-02-22]1.程序名称:书籍借阅系统2.课题来源:课程组自拟3.课题类型:综合型4.目的和意义:1)综合运用所学知识,解决实际问题2)全面提高学生的程序设计......
  • C++中标准库
    C++中标准库是什么?C++标准库可以分为两部分:标准函数库:由通用的、独立的、不属于任何类的函数组成的。函数库继承自C语言。面向对象类库:这个库是类及其相关函数......
  • C++中的组合
    知道C++中的组合吗?它与继承相比有什么优缺点吗?继承:继承是Isa的关系Student继承Person,则说明StudentisaPerson。优点是子类可以重写父类的方法来方便地实现对父......
  • C++面对对象:实现string类
    1//string.h2#pragmaonce3classString{4public:5String(constchar*cstr=0);6String(constString&str);7~String();89......