请教一个关于C++ decltype的问题 20

inti=42,*p=&i,&r=i;decltype(*p)c;//为什么这一句decltype得到的是int&类型呢,这里*p相当于定义了一个指向整数的指针p,树上说... int i=42,*p=&i,&r=i;
decltype(*p) c; //为什么这一句decltype得到的是int &类型呢,这里*p相当于定义了一个指向整数的指针p,树上说decltype括号中的*p这个星号是解引用的意思,定义的时候是定义指针变量,怎么到下面的代码又变成解引用了?虽然书上说了decltype(*p)得到的类型不是int而是int &,但还是看不懂为什么会这样
展开
 我来答
匿名用户
2017-04-06
展开全部
所谓的解引用(dereference)是指对指针进行的操作,p是一个指针,*p是对p进行解引用操作,对p进行操作之后,你可以把(*p)当成一个整体,可以进行类似int a = *p;*p = 3;之类的操作,即你可以读取p指向的变量的值,亦可以对p所指向的变量进行赋值或其它操作。总之,*对于指针只有两种作用,一是定义指针变量时指明这个变量是指针变量,二就是对指针进行解引用操作,以此间接对它所指向的对象进行操作
百度网友b20237f
2021-03-16
知道答主
回答量:1
采纳率:0%
帮助的人:850
展开全部
在C++语言中,对decltype可分成四步,现假设存在decltype(expression)var:

第一步,如果expression没有被括号括上,则对var的类型定义与该标识符相同,且包括const限定符
第二步:expression是函数调用时,var与该函数的返回类型相同
第三步:若expression为左值,则var为指向其类型的引用,要进入这一步则需要前面的两步都不满足,显然此时expression可以被括号包括,且var得到包括的expression的类型引用,对此处*p显然不满足标识符的定义,但满足左值的定义,故得到可进入第三步的条件,即满足c类型为int &。
第四步:上述三步不满足时,var类型同expression类型相同。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式