指针是左值还是右值?
在其他帖子中,我遇到了
(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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
指针不是那种可以是右值或左值的东西。指针是一种类型。唯一可以是右值或左值的是表达式。
考虑这个类似的问题:“整数是左值还是右值”。嗯,都不是。 “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. Buti=3;
is legal ifi
is an integer. Soi
is an integer and an lvalue.3
is an integer and a rvalue.