我是C++的初学者,正在尝试使用decltype。在这段代码中,使用1就可以了。x将是一个整数*。但是,我对使用2.取消引用(*)指针应该提供int有疑问。但它似乎是int &参考。我对此感到困惑。有谁能解释一下吗?
#include<iostream>
int main()
{
int i=5, *p=&i;
decltype(p) x; //use 1
decltype(*p) x; //use 2
return 0;
}发布于 2017-12-11 03:26:08
取消引用(*)指针应提供int
不是任何旧的int,它实际上给出了一个左值。你可以给它赋值,就像*p = 4;一样。现在你也可以赋值给p本身,但这有点不同。p is对象的标识符。而*p在没有直接命名的情况下引用了其他对象( int),这是通过一个不太简单的表达式来实现的。
这是一个细微的差异,但decltype的推导规则试图强调并保留它,如下所示([dcl.type.simple]/4):
对于表达式e,由decltype(e)表示的类型定义如下:
否则,如果e是不带括号的id表达式...,则(E)是由e.
https://stackoverflow.com/questions/47742562
复制相似问题