Why isn't ++x an lvalue in D?
Bill Baxter
wbaxter at gmail.com
Thu Jan 8 21:46:19 PST 2009
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?
--bb
More information about the Digitalmars-d
mailing list