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...