指针是左值还是右值?

发布于 2024-12-20 14:05:02 字数 269 浏览 2 评论 0原文

在其他帖子中,我遇到了

(5.2.9/8) “指向 cv1 T 类型的 D 成员的指针”类型的右值可以 转换为“指向 cv2 类型的 B 成员的指针”类型的右值 T”,其中 B 是 D 的基类(第 10 条),

请注意语言标准中的这一点。所以我的问题是,

int i = 0;
int *p = &i;
*p = 1;

指针在所有情况下都是左值吗?什么时候它被视为右值?

In other post, I came across

(5.2.9/8) An rvalue of type "pointer to member of D of type cv1 T" can
be converted to an rvalue of type "pointer to member of B of type cv2
T", where B is a base class (clause 10) of D,

Note this from language standard. So my question,

int i = 0;
int *p = &i;
*p = 1;

Is a pointer is an lvalue in all the cases? When does it is treated as rvalue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

往昔成烟 2024-12-27 14:05:02

指针不是那种可以是右值或左值的东西。指针是一种类型。唯一可以是右值或左值的是表达式。

考虑这个类似的问题:“整数是左值还是右值”。嗯,都不是。 “3”是一个整数,也是一个右值。 3=i; 是非法的。但如果 i 是整数,则 i=3; 是合法的。所以 i 是一个整数和一个左值。 3 是一个整数和一个右值。

A pointer is not the kind of thing that can be an rvalue or an lvalue. A pointer is a type. The only thing that can be an rvalue or an lvalue is an expression.

Consider this similar question: "Is an integer an lvalue or an rvalue". Well, neither. "3" is an integer, and an rvalue. 3=i; is illegal. But i=3; is legal if i is an integer. So i is an integer and an lvalue. 3 is an integer and a rvalue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文