• C++ decltype类型推导


    1、decltype介绍

    decltype(declare type,声明类型)为C++11 新增的关键字,和auto功能一样,用于在编译期间进行自动类型推导。
    auto和decltype关键字都可以自动推导出变量的类型,但他们的用法是有区别的:

    auto varname = value;
    decltype(exp) varname = value;
    

    auto会根据=右边的初始值value推导出变量的类型,而decltype会根据exp表达式推导出变量的类型,跟=右边的value没有关系。
    此外,auto会要求变量必须初始化,而decltype不要求;
    PS:exp 注意事项

    原则上讲,exp 就是一个普通的表达式,它可以是任意复杂的形式,但是我们必须要保证 exp 的结果是有类型的,不能是 void;

    举例:

    int a = 0;
    decltype(a) b = 1;  //b 被推导成了 int
    decltype(10.8) x = 5.5;  //x 被推导成了 double
    decltype(x + 100) y;  //y 被推导成了 double
    

    2、decltype推导规则

    使用 decltype(exp) 获取类型时,编译器将根据以下三条规则得出结果:

    • 如果 exp 是一个不被括号( )包围的表达式,或者是一个类成员访问表达式,或者是一个单独的变量,那么 decltype(exp) 的类型就和 exp 一致,这是最普遍最常见的情况。
    • 如果 exp 是函数调用,那么 decltype(exp) 的类型就和函数返回值的类型一致。
    • 如果 exp 是一个左值,或者被括号( )包围,那么 decltype(exp) 的类型就是 exp 的引用;假设 exp 的类型为 T,那么 decltype(exp) 的类型就是 T&。

    左值是指那些在表达式执行结束后依然存在的数据,也就是持久性的数据;右值是指那些在表达式执行结束后不再存在的数据,也就是临时性的数据。有一种很简单的方法来区分左值和右值,对表达式取地址,如果编译器不报错就为左值,否则为右值。

    参考:http://c.biancheng.net/view/7151.html

  • 相关阅读:
    章节十:Selenium
    章节七:csv&excel
    章节十三:协程实践
    章节十二:协程
    章节八:爬取知乎文章
    章节十五:Scrapy实操
    章节十六:复习与反爬虫
    章节十一:定时与邮件
    章节十四:Scrapy框架
    阅读习惯2
  • 原文地址:https://www.cnblogs.com/whiteBear/p/15779922.html
Copyright © 2020-2023  润新知