> 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

Reply via email to