我是C ++的初学者并尝试使用git
。在此代码中,使用1很好。 decltype
将是一个int *。但是,我对使用2有疑问。解除引用(x
)指针应该给int。但似乎是*
参考。我在这里很困惑。谁能解释一下?
int &
答案 0 :(得分:3)
解除引用(*)指针应该给出int
不仅仅是旧的int
,它实际上给出了一个左值。您可以像*p = 4;
那样分配给它。现在您也可以分配给p
本身,但这有点不同。 p
是对象的标识符。虽然*p
引用了一些其他对象(int
)而未直接命名,但表达式不太简单。
这是一个微妙的差异,然而decltype
的演绎规则试图强调并保留它如下([dcl.type.simple]/4):
对于表达式e,由decltype(e)表示的类型定义为 如下:
- 否则,如果e是未表示的id-expression [...],则decltype(e)是e命名的实体的类型。
- 否则,如果e是左值,则decltype(e)是T&,其中T是e的类型;