请教一个关于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 &,但还是看不懂为什么会这样 展开
decltype(*p) c; //为什么这一句decltype得到的是int &类型呢,这里*p相当于定义了一个指向整数的指针p,树上说decltype括号中的*p这个星号是解引用的意思,定义的时候是定义指针变量,怎么到下面的代码又变成解引用了?虽然书上说了decltype(*p)得到的类型不是int而是int &,但还是看不懂为什么会这样 展开
2个回答
2017-04-06
展开全部
所谓的解引用(dereference)是指对指针进行的操作,p是一个指针,*p是对p进行解引用操作,对p进行操作之后,你可以把(*p)当成一个整体,可以进行类似int a = *p;*p = 3;之类的操作,即你可以读取p指向的变量的值,亦可以对p所指向的变量进行赋值或其它操作。总之,*对于指针只有两种作用,一是定义指针变量时指明这个变量是指针变量,二就是对指针进行解引用操作,以此间接对它所指向的对象进行操作
展开全部
在C++语言中,对decltype可分成四步,现假设存在decltype(expression)var:
第一步,如果expression没有被括号括上,则对var的类型定义与该标识符相同,且包括const限定符
第二步:expression是函数调用时,var与该函数的返回类型相同
第三步:若expression为左值,则var为指向其类型的引用,要进入这一步则需要前面的两步都不满足,显然此时expression可以被括号包括,且var得到包括的expression的类型引用,对此处*p显然不满足标识符的定义,但满足左值的定义,故得到可进入第三步的条件,即满足c类型为int &。
第四步:上述三步不满足时,var类型同expression类型相同。
第一步,如果expression没有被括号括上,则对var的类型定义与该标识符相同,且包括const限定符
第二步:expression是函数调用时,var与该函数的返回类型相同
第三步:若expression为左值,则var为指向其类型的引用,要进入这一步则需要前面的两步都不满足,显然此时expression可以被括号包括,且var得到包括的expression的类型引用,对此处*p显然不满足标识符的定义,但满足左值的定义,故得到可进入第三步的条件,即满足c类型为int &。
第四步:上述三步不满足时,var类型同expression类型相同。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询