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

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

本文关键字:C++ 指针 一个 是否 应用于 decltype 表达式 如果      更新时间:2023-10-16

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

引用是右值,在将decltype应用于右值时是否总是得到指针?

decltype应用于...

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

(id-表达式有一个例外,我不会深入讨论。就本答案而言,只需将"表达式"视为"除 id 表达式以外的任何表达式"。

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

若要将其放入代码中,请U对象类型。然后:

  • 有了U f();decltype(f())U了。
  • 有了U& f();decltype(f())U&了。
  • 有了U&& f();decltype(f())U&&了。

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