首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用decltype时出错

使用decltype时出错
EN

Stack Overflow用户
提问于 2017-12-11 03:23:50
回答 1查看 43关注 0票数 0

我是C++的初学者,正在尝试使用decltype。在这段代码中,使用1就可以了。x将是一个整数*。但是,我对使用2.取消引用(*)指针应该提供int有疑问。但它似乎是int &参考。我对此感到困惑。有谁能解释一下吗?

代码语言:javascript
复制
#include<iostream>

int main()
{
    int i=5, *p=&i;
    decltype(p) x; //use 1
    decltype(*p) x; //use 2

    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 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.

  • otherwise,命名的实体的类型。如果e是左值,则decltype(e)是T&,其中T是e的类型;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47742562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档