Hippogriff's Blog
首页
C++
  • 算法
  • 数据结构
  • Leetcode
  • 操作系统
  • 计算机网络
  • MySQL
  • 深度学习
  • 网络
收藏
  • 醍醐灌顶
  • 句读
个人书单 (opens new window)
GitHub (opens new window)

Absm

什么也不会
首页
C++
  • 算法
  • 数据结构
  • Leetcode
  • 操作系统
  • 计算机网络
  • MySQL
  • 深度学习
  • 网络
收藏
  • 醍醐灌顶
  • 句读
个人书单 (opens new window)
GitHub (opens new window)
  • 【C++&Leetcode】自定义排序的方法与辨析
  • 关于优先队列priority_queue
  • 关于C++ STL size的坑
  • C++ 智能指针
  • C++ const
  • C++&STL中String常见函数用法
  • C++11的decltype
    • 概述
    • 使用方法
    • 注意事项
    • 参考
  • C++11右值引用【来自IBM文档】
  • C++11中循环auto的引用
  • C++中的lambda表达式
  • C风格字符串库函数总结
  • C与C++风格的字符串辨析
  • CMake基础命令
  • C++
Absm
2021-03-14
目录

C++11的decltype

# C++11的decltype关键字

# 概述

decltype关键字和auto有异曲同工之处

有时我们希望从表达式的类型推断出要定义的变量类型,但是不想用该表达式的值初始化变量(如果要初始化就用auto了)。为了满足这一需求,C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型,在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值。

# 使用方法

int getSize();

int main(void)
{
    int tempA = 2;
    
    /*1.dclTempA为int*/
    decltype(tempA) dclTempA;
    /*2.dclTempB为int,对于getSize根本没有定义,但是程序依旧正常,因为decltype只做分析,并不调用getSize,*/
    decltype(getSize()) dclTempB;

    return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13

还有很多用法,此处暂不深究。

# 注意事项

decltype和auto都可以用来推断类型,但是二者有几处明显的差异:

  1. auto忽略顶层const,decltype保留顶层const;

  2. 对引用操作,auto推断出原有类型,decltype推断出引用;

  3. 对解引用操作,auto推断出原有类型,decltype推断出引用;

  4. auto推断时会实际执行,decltype不会执行,只做分析。

总之在使用中过程中和const、引用和指针结合时需要特别小心。

# 参考

https://www.cnblogs.com/cauchy007/p/4966485.html

编辑 (opens new window)
上次更新: 2021/06/03, 13:03:33
C++&STL中String常见函数用法
C++11右值引用【来自IBM文档】

← C++&STL中String常见函数用法 C++11右值引用【来自IBM文档】→

最近更新
01
少年游·长安古道马迟迟
11-30
02
CMake基础命令
11-08
03
由浅入深剖析OAuth2.0的授权码模式
07-07
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Murray Li | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×