Nick Sabalausky пишет: > "Weed" <resume...@mail.ru> wrote in message > news:gk6n29$218...@digitalmars.com... >> Bill Baxter ?????: >>> 2009/1/9 Weed <resume...@mail.ru>: >>>> Bill Baxter ?????: >>>>> Another thread just reminded me of something I use frequently in C++ >>>>> that doesn't work in D because ++x is not an lvalue: >>>>> >>>>> int x,N; >>>>> ... >>>>> ++x %= N; >>>>> >>>>> So is there some deep reason for not making it an lvalue like in C++? >>>>> >>>> ++x is x+=1 in D: >>>> >>>> void main() { >>>> int i =3; >>>> int N =2; >>>> (i+=1) %= N; >>>> } >>>> >>>> >>>> Error: i += 1 is not an lvalue. >>>> >>>> C++: >>>> >>>> int main() >>>> { >>>> int i = 2; >>>> int N = 3; >>>> i+1 %= N; >>>> >>>> return 0; >>>> } >>>> >>>> error: lvalue required as left operand of assignment >>>> >>> What does C++ do if you use (i+=1) %= N instead of (i+1)? Doesn't += >>> also return an lvalue in C++? >> I am a bit mixed, but the meaning has not changed: >> >> $ cat demo.cpp >> int main() >> { >> int i = 2; >> int N = 3; >> i+=1 %= N; >> > > Shouldn't that be "(i += 1) %= N"? Assignments are right-associative (but > then these are op-assigns...). The error is probably saying that "1" can't > be an lvalue for "%= N" which, of course, is true.
Yes, my code is wrongю And apparently, we have an error in D > >> return 0; >> } >> >> $ c++ demo.cpp >> demo.cpp: In function 'int main()': >> demo.cpp:5: error: lvalue required as left operand of assignment > > >