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

2025年03月01日 06:52
有2个网友回答
网友(1):

所谓的解引用(dereference)是指对指针进行的操作,p是一个指针,*p是对p进行解引用操作,对p进行操作之后,你可以把(*p)当成一个整体,可以进行类似int a = *p;*p = 3;之类的操作,即你可以读取p指向的变量的值,亦可以对p所指向的变量进行赋值或其它操作。总之,*对于指针只有两种作用,一是定义指针变量时指明这个变量是指针变量,二就是对指针进行解引用操作,以此间接对它所指向的对象进行操作

网友(2):

在C++语言中,对decltype可分成四步,现假设存在decltype(expression)var:

第一步,如果expression没有被括号括上,则对var的类型定义与该标识符相同,且包括const限定符
第二步:expression是函数调用时,var与该函数的返回类型相同
第三步:若expression为左值,则var为指向其类型的引用,要进入这一步则需要前面的两步都不满足,显然此时expression可以被括号包括,且var得到包括的expression的类型引用,对此处*p显然不满足标识符的定义,但满足左值的定义,故得到可进入第三步的条件,即满足c类型为int &。
第四步:上述三步不满足时,var类型同expression类型相同。