December 11, 2012 Re: Is there any reason why arithmetic operation on shorts and bytes return int? | ||||
---|---|---|---|---|
| ||||
Attachments:
| For some more clarity, when I compile the following code: void main() { import std.stdio; byte a; byte b; byte c = a + b; } I get error: test.d(6): Error: cannot implicitly convert expression (cast(int)a + cast(int)b) of type int to byte Why is D trying to convert bytes and shorts to integers before applying any arithmetic operator? Regards - Puneet |
December 11, 2012 Re: Is there any reason why arithmetic operation on shorts and bytes return int? | ||||
---|---|---|---|---|
| ||||
Posted in reply to d coder | On Tuesday, 11 December 2012 at 12:30:35 UTC, d coder wrote:
> For some more clarity, when I compile the following code:
>
> void main() {
> import std.stdio;
> byte a;
> byte b;
> byte c = a + b;
> }
>
> I get error:
> test.d(6): Error: cannot implicitly convert expression (cast(int)a +
> cast(int)b) of type int to byte
>
> Why is D trying to convert bytes and shorts to integers before applying any
> arithmetic operator?
>
> Regards
> - Puneet
As I answered in the other thread, it's just the way things are done, since the days of C.
What D brings to the table though is extra safety:
void main() {
import std.stdio;
ubyte a = 200;
ubyte b = 200;
ubyte c = a + b;
}
here, a + b will have a value of 400, and have overflown its ubyte storage. If you want to store the result back into a ubyte, then you'll have to do it explicitly. In this way, if overflow *does* occur, you can't blame the compiler for doing it behind your back...
|
Copyright © 1999-2021 by the D Language Foundation