> Is this OK or is this a bug, when the wariable 'n' is > initializing by negative value? There no any warning. > Is this normal? I know that value -5 is converted > to unsigned but probably this should by printed a warning, > when this is a constant value. What do you think about this? > > > // prog.cpp > #include <iostream> > using namespace std; > > int main() > { > const unsigned int n = -5; > > cout << "The variable n is: " << n << endl; > > return 0; > } > > Results: > $ g++ -Wall -W prog.cpp -o prog > $ ./prog > The variable n is: 4294967291
This is expected behavior, but not defined by the standard because the result is not portable. That is, a rollover value will occur, but it could vary depending on the width of an int, and possibly by the binary representation. As far as I know all systems that Debian with gcc runs on are two's complement, but still... I cannot speak to the C++11 standard because ISO/ANSI are not asking a reasonable price for the specification docs, and I can't afford the price. A good compiler *may* warn you about this, but it may not do so by default. You may have to turn the warnings on. Note: gcc's -Wall is tricky. You may still not get what you expect. This kind of type shenanigan is allowed in C/C++ because of silent standard conversions. A strongly-(enough)-typed language will not permit conversions to or from signed<->unsigned without a cast or a conversion function. C/C++ allows this because there is no loss of significant digits (precision). -- To UNSUBSCRIBE, email to debian-user-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/014b01cde813$cf3879e0$6da96da0$@allums.com