如果我将 decltype 应用于产生右值的表达式,我是否总是得到一个指针? C++

If I apply decltype to an expresstion that yields an rvalue, do I always get a pointer? C++

我知道如果我将 decltype 应用到 p,其中 pint*decltype(*p)int&decltype(&p)int**.

引用是一个右值,当我将 decltype 应用于右值时,我总是得到一个指针吗?

decltype 应用于...

  • 纯右值表达式给出非引用类型,
  • 一个 xvalue 表达式给出了一个右值引用类型,并且
  • 左值表达式给出左值引用类型。

(对于 id-expressions 有一个例外,我不会深入探讨。就此答案而言,只需考虑 "expression" 表示 "any expression other than an id-expression"。)

在所有情况下,decltype 类型的基础类型是表达式的类型。

为了将其放入代码中,让 U 成为一个对象类型。那么:

  • U f();decltype(f())U
  • U& f();decltype(f())U&
  • U&& f();decltype(f())U&&

在您的示例中,*pint 类型的左值,因此 decltype(*p)int&,而 &p&p 类型的纯右值 int**,所以 decltype(&p)int**