任何人都可以用简单的话语告诉我这个L值是什么以及为什么我遇到错误“函数main()中需要的L值?”
答案 0 :(得分:4)
左值是可以分配或指向的左旋 这是一个有地址的东西。
示例:
int f()
{
return 5;
}
f() = 8; // doesn't compile, f() is not an lvalue
int* g()
{
int* pv = malloc(sizeof(int));
*pv = 5;
return pv;
}
*g() = 8; // compiles, as *g() is a lvalue
如果您发布了代码,我们将告诉您为什么会收到有关丢失左值的错误消息。
答案 1 :(得分:3)
左值是指给一个对象的表达式的术语,即带有地址的东西。
从历史上看,这是因为它出现在作业的左侧是有效的。相比之下,可以出现在赋值右侧的某些内容是 rvalue ,但 rvalue 实际上是指任何不是左值<的表达式< / em>的
通常,您可以将左值转换为 rvalues (对象具有值),但不是相反。
通常,您所获得的错误意味着您正在尝试对仅对 lvalues 有效的 rvalue 执行某些操作。
可能是,分配一个函数的结果,或者取一个文字的地址。
f() = 5;
int *p = &5;