考虑这个代码: struct foo { int a; }; foo q() { foo f; fa =4; return f;} int main() { foo i; ia = 5; q() = i; } 没有编译器抱怨,即使是Clang。 为什么q() = …行是正确的?
为什么第一个返回一个引用? int x = 1; int y = 2; (x > y ? x : y) = 100; 而第二个不? int x = 1; long y = 2; (x > y ? x : y) = 100; 实际上,第二个根本没有编译 – “左派不是左派”。
这里说明了这一点 术语可修改的左值用于强调左值允许指定的对象被改变以及被检查。 以下对象types是左值,但不能修改左值: 一个数组types 一个不完整的types 一个const限定的types 一个结构或联合types的一个成员资格为consttypes 因为这些左值是不可修改的,所以它们不能出现在赋值语句的左边。 为什么数组types对象是不可修改的? 写这个不正确吗? int i = 5, a[10] = {0}; a[i] = 1; ? 而且,什么是不完整的types?
int main () { int a = 5,b = 2; printf("%d",a+++++b); return 0; } 此代码给出了以下错误: 错误:左值需要作为增量操作数 但是,如果我把整个a++ +和++b ,那么它工作正常。 int main () { int a = 5,b = 2; printf("%d",a++ + ++b); return 0; } 第一个例子中的错误是什么意思?