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

Weed resume755 at mail.ru
Thu Jan 8 22:51:32 PST 2009


Bill Baxter пишет:
> On Fri, Jan 9, 2009 at 2:22 PM, Weed <resume755 at mail.ru> wrote:
>> 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
>>
> 
> Huh.  Ok, well I guess that answers it then.  Thanks.  Mystery solved!
> To summarize, In D   ++x is x+=1, and in D, like in C++,  x+=1 is not
> an lvalue.   Got it.
> 
> But now I wonder why it's not an lvalue in C++ or D.  If x=y is an
> lvalue and ++x is an lvalue, why shouldn't x+=1 be one too?

	
It is also a lvalue, it is my mistake again.

(i+=1) %= N;



More information about the Digitalmars-d mailing list