【问题标题】:What is decltype and how is it used?什么是 decltype 以及它是如何使用的?
【发布时间】:2013-09-19 20:20:35
【问题描述】:

我还没有找到对 decltype 的很好解释。请告诉我,作为一个初级程序员,它做了什么以及为什么有用。

例如,我正在阅读一本提出以下问题的书。有人可以向我解释答案和原因,以及一些好的(初级)示例吗?

每个变量的类型是什么,当代码完成时每个变量的值是什么?

int a = 3, b = 4;    
decltype(a) c = a;

decltype((b)) d = a; 

++c; 

++d;

逐行解释会很有帮助。

【问题讨论】:

  • 我已经看到了很多关于decltype 的很好的解释。它们肯定存在。
  • 即使Wikipedia's explanation 看起来也很简单。

标签: c++ c++11 decltype


【解决方案1】:

decltype 是一种指定类型的方法:你给它一个表达式decltype 给你一个对应于表达式类型的类型。具体来说,decltype(e) 是以下类型:

  • 如果e 是变量的名称,即“id-expression”,那么结果类型就是变量的类型。

  • 否则,如果e 求值为T 类型的左值,则结果类型为T &,如果e 求值为T 类型的右值,则结果类型为@987654330 @。

将这些规则与参考折叠规则结合起来,您可以理解decltype(e) &&,它始终是一个“合适的”参考。 (C++14 还添加了decltype(auto),为您提供auto 的类型推导和decltype 的值类别语义。)

例子:

int foo();
int n = 10;

decltype(n) a = 20;             // a is an "int" [id-expression]

decltype((n)) b = a;            // b is an "int &" [(n) is an lvalue]

decltype(foo()) c = foo();      // c is an "int" [rvalue]

decltype(foo()) && r1 = foo();  // int &&
decltype((n)) && r2 = n;        // int & [& && collapses to &]

可能值得强调autodecltype 之间的区别:auto 适用于类型,而decltype 适用于表达式。 p>

您不应该在“日常”编程中看到或使用decltype。它在通用(模板化)库代码中最有用,其中所讨论的表达式是未知的并且取决于参数。 (相比之下,auto 可能会被广泛使用。)简而言之,如果您是编程新手,您可能在一段时间内不需要使用decltype

【讨论】:

  • decltype() 作用于表达式。来自 cppreference:表达式是一系列运算符及其操作数,用于指定计算。。为什么 decltype(x) var 可以工作,而 int x 之前已声明?
  • @Kerrek SB id-expression?那是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2015-03-13
  • 2013-10-25
  • 2014-11-19
  • 1970-01-01
  • 2011-11-01
相关资源
最近更新 更多