• decltype关键字


    类型说明符: decltype。作用: 选择并返回操作数的数据类型。

    参考来源: c++ primer 中文版第5版62页。

    1. 在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值。

    decltype(f()) sum  = x //sum的类型就是函数f的返回值。

    编译器并不实际调用函数f,而是使用当调用发生时f的返回值类型作为sum的类型。

    2.如果decltype使用的表达式是一个变量,则decltype返回该变量的类型(包括顶层const和引用在内)。

    const int ci = 0, &cj = ci;
    decltype(ci) x = 0;  //x的类型是const int
    decltype(cj) y = x;  //y的类型是const int&,y绑定到变量x

    3. decltype的结果可以是引用类型

    1 int i = 42, *p = &i, &r = i;
    2 decltype(r+0) b ;// 正确,加法的结果是int,因此b是一个未初始化的int
    3 decltype(*p) c;   //错误: c是int&,必须初始化.

    由于r是一个引用,因此decltype(r)的结果是引用类型。

    如果想要结果类型是r所指的类型,可以把r作为表达式的一部分, 如第二行代码所示,显然表达式的结果是一个具体的数值,而非一个引用。

    4.Note: decltype((variable)),双层括号的使用。

    //decltype的表达式如果是加上了括号的变量,结果将是引用
    int i = 42;
    decltype((i)) d;  //错误,d是int&,结果将是引用
    decltype(i) e;    // 正确:e是一个(未初始化的)int.

    注意: decltype((variable))(双层括号),的结果永远是引用,而decltype(variable)的结果只有当variable本身就是一个引用时才是引用。

    The Safest Way to Get what you Want is to Try and Deserve What you Want.
  • 相关阅读:
    POJ 1915 简单 广搜题
    poj 2479 最大子数段
    poj 1321 深搜题
    hdu 1024 最大子段和
    .net 学习总结
    [转]SharpDevelop源码分析 (二、主程序+隐藏的初始化)
    工作六年经验分享:软件工程师如何修炼(转)
    Ajax命名空间一个获取指定的页面元素的快捷方式——$get()
    [转]SharpDevelop代码分析 (一、序+基本概念)
    [转]SharpDevelop源码分析 (三、插件系统)
  • 原文地址:https://www.cnblogs.com/Shinered/p/9190159.html
Copyright © 2020-2023  润新知