What is the actual use of "signed" keyword?
I know that unsigned integers are only positive numbers (and 0), and can have double the value compared to a normal int. Are there any difference between
int variable = 12;
And:
signed int variable = 12;
When and why should you use the signed keyword?
Solution 1:
There is only one instance where you might want to use the signed
keyword. signed char
is always a different type from "plain" char
, which may be a signed or an unsigned type depending on the implementation.
C++14 3.9.1/1 says:
It is implementation-defined whether a
char
object can hold negative values. Characters can be explicitly declaredunsigned
orsigned
. Plainchar
,signed char
, andunsigned char
are three distinct types [...]
In other contexts signed
is redundant.
Prior to C++14, (and in C), there was a second instance: bit-fields. It was implementation-defined whether, for example, int x:2;
(in the declaration of a class) is the same as unsigned int x:2;
or the same as signed int x:2
.
C++11 9.6/3 said:
It is implementation-defined whether a plain (neither explicitly signed nor unsigned)
char
,short
,int
,long
, orlong long
bit-field is signed or unsigned.
However, since C++14 this has been changed so that int x:2;
always means signed int
. Link to discussion
Solution 2:
In the case of int
, there's no difference. It only makes a difference with char
, because
- it is not defined whether
char
is signed or unsigned, and -
char
,signed char
, andunsigned char
are three distinct types anyway.
So you should use signed
if you need a signed char
(which is probably rarely). Other than that, I can't think of a reason.
Solution 3:
signed
is the default integer type. So no, there is no difference in the example you gave. There is a difference only in the case of char
.
Source: C++ Reference