On Fri, Jan 9, 2009 at 2:43 PM, Weed <resume...@mail.ru> wrote: > Weed пишет: >> 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 > > And I think it is wrong that the ++ same as += 1. The operator ++ in C > uniquely compiles in CPU instruction "increment". > > For objects it would be better to make a += 1 only if undefined > overloaded operator ++.
Yeh, I think that's scheduled to be changed after Andrei's repeated thrashings of Walter. --bb