Why isn't ++x an lvalue in D?

Weed resume755 at mail.ru
Thu Jan 8 21:43:12 PST 2009


Weed пишет:
> Bill Baxter пишет:
>> 2009/1/9 Weed <resume755 at 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 ++.



More information about the Digitalmars-d mailing list