【发布时间】:2021-02-16 03:08:37
【问题描述】:
我试图通过堆栈溢出问题之一来理解 C++ 中的 decltype What is decltype and how is it used?
部分接受的答案如下。
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 &]
我无法理解下面的陈述。
decltype((n)) b = a; // b 是 "int &" [(n) 是左值]
谁能告诉我为什么 (n) 被认为是左值。
【问题讨论】:
-
n是左值,括号不改变值类别 -
@MM,按照这个逻辑,在语句 decltype(n) a = 20 中,n 应该被视为左值。但这里 a 是一个 int。不是 int &。
-
这实际上是
decltype(n)的特殊之处 - 标准有一个特殊情况,当参数是一个未附加的 id 表达式时,它会丢弃“左值”。 -
decltype(n)中没有(n)表达式。语法是decltype(表达式或id),而不是decltype表达式 -
@MM:知道了。您能否将其发布为答案。我会接受的。