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

Weed resume755 at mail.ru
Thu Jan 8 21:22:09 PST 2009


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



More information about the Digitalmars-d mailing list