gpt4 book ai didi

c++ - 通常,解引用指针表达式结果是引用类型吗?

转载 作者:可可西里 更新时间:2023-11-01 16:28:04 27 4
gpt4 key购买 nike

引用指针导致间接使用对象的值。但我从来没有真正理解“使用”是什么意思。我开始思考这个问题,直到我的编译器对以下代码产生错误

int i = 0, *pi = &i;
decltype(*pi) c; // error: 'c' declared as reference but not initialized.

错误看了很久,搜索了一些问题只能给出如下论据。我不知道他们是否正确。

参数 1:

1) *p是一个不是变量的表达式(或非变量表达式)

2) 解引用指针表达式产生引用,我们实际上是在使用引用来访问对象的值

参数 2:

解引用表达式只针对 decltype 返回一个引用,这不是一般情况

请指出以上论点的任何不正确或不准确的描述。

最佳答案

Dereferencing a pointer yields an lvalue expression of the pointed-to type designating the object or function pointed to.它不产生引用。* *piint 类型的左值。

decltype(此处不相关的异常(exception))报告表达式的类型及其值类别the latter being encoded with reference types .由于*pi是一个左值,它被编码为一个左值引用类型,所以decltype(*pi)int &:int 为类型,& 为值类别。

表达式从来没有引用类型,因为任何引用都被调整掉了 "prior to any further analysis" .


* 这不仅仅是技术上的区别:根据 core issue 232 的指示和 core issue 453 ,您可以编写有效的取消引用表达式,其中将其结果绑定(bind)到引用会导致未定义的行为。

关于c++ - 通常,解引用指针表达式结果是引用类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48388510/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com