美文网首页C++C++2.0
C++11关键字decltype

C++11关键字decltype

作者: SparkLiu | 来源:发表于2016-10-03 00:46 被阅读206次

在C++泛型编程中,经常会使用到模板,但是模板在使用时,可能会出现不知道应该声明是什么类型的状况

template<typename T1,typename t2>
void  fun(T1 a,T2 b)
{
    ?type? aplusb=a+b;
}

在上叙情况中,我们事先并不知道aplusb的类型,无法对其进行声明。
但是C++11中新增加的关键字decltype解决了这个问题

int x;
decltype(x) y;

这使得y的类型与x相同,decltype可以是表达式,函数调用等等
例如

int fun1(a){return a;}
decltype (fun1) x;//令x类型与fun1的返回类型相同
------------------------------------
int x;
double y;
decltype(x+y) xpy;//令xpy类型与x+y相同

C++后置返回类型

template<typename T1,typename t2>
 ?type? fun(T1 a,T2 b)
{
    return a+b;
}

由于在提供返回类型之前,还未声明变量a,b所以无法对返回类型设置为decltype(a,b)
这时候在C++11中提供了一个解决方案,就是后置返回类型

template<typename T1,typename t2>
auto fun(T1 a,T2 b) -> decltype(a+b)
{
    return a+b;
}

这个函数模板的返回类型即为decltype(a+b)
这在实际的泛型编程中非常有用,如果一开始未知要返回什么类型,先设置返回类型为auto再在后面->type(expression),这就可以解决很大一部分的问题。

文章摘取自C++PrimerPlus第六版 8.5.6
P.S 最近在讨论项目和看namespace的事,就拿了第八章的这个decltype关键字来写,decltype算是最近学的东西里面和实际代码中关系比较大的东西了吧。

相关文章

  • C++11中auto和decltype

    C++11中auto和decltype auto和decltype都是C++11中引进来用于自动推断类型的关键字,...

  • decltype关键字

    C++11新标准学习:decltype关键字 1. decltype的意义 有时我们希望从表达式的类型推断出要定义...

  • C++11拾穗

    C++11新关键字 alignas:指定对齐大小 alignof:获取对齐大小 decltype auto(重新定...

  • C++11关键字decltype

    在C++泛型编程中,经常会使用到模板,但是模板在使用时,可能会出现不知道应该声明是什么类型的状况 在上叙情况中,我...

  • 【c++11关键字】decltype

  • C++11类型推导

    C++11 重新定义了auto 和 decltype 这两个关键字实现了类型推导,让编译器来操心变量的类型。 au...

  • C++11的类型推导详解

    auto & decltype 关于C++11新特性,最先提到的肯定是类型推导,C++11引入了auto和decl...

  • 模板函数返回类型的演进

    提纲 c++03: trick 方法 c++11: auto->decltype 组合 c++14: 自动推导模板...

  • C++11之decltype

    decltype是一种新的操作符,用于获取表达式的数据类型。使用方法和sizeof操作符类似。 decltype(...

  • C++雾中风景10:聊聊左值,纯右值与将亡值

    C++11的版本在类型系统上下了很大的功夫,添加了诸如auto,decltype,move等新的关键词来简化代码的...

网友评论

本文标题:C++11关键字decltype

本文链接:https://www.haomeiwen.com/subject/kdrzettx.html