使用decltype时出错

时间:2017-12-10 19:23:50

标签: c++ c++11

我是C ++的初学者并尝试使用git。在此代码中,使用1很好。 decltype将是一个int *。但是,我对使用2有疑问。解除引用(x)指针应该给int。但似乎是*参考。我在这里很困惑。谁能解释一下?

int &

1 个答案:

答案 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的类型;
  •