如果我将 decltype 应用于产生右值的表达式,我是否总是得到一个指针? C++
If I apply decltype to an expresstion that yields an rvalue, do I always get a pointer? C++
我知道如果我将 decltype
应用到 p
,其中 p
是 int*
,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&&
。
在您的示例中,*p
是 int
类型的左值,因此 decltype(*p)
是 int&
,而 &p
是 &p
类型的纯右值 int**
,所以 decltype(&p)
是 int**
。
我知道如果我将 decltype
应用到 p
,其中 p
是 int*
,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&&
。
在您的示例中,*p
是 int
类型的左值,因此 decltype(*p)
是 int&
,而 &p
是 &p
类型的纯右值 int**
,所以 decltype(&p)
是 int**
。