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; return 0; } $ c++ demo.cpp demo.cpp: In function ‘int main()’: demo.cpp:5: error: lvalue required as left operand of assignment