什么是“签名”关键字的实际使用?

我知道无符号整数只是正数(和0),并且与正常的int相比可以有两倍的值。 有什么区别吗?

int variable = 12; 

和:

 signed int variable = 12; 

何时以及为什么要使用signed关键字?

只有一个实例可能需要使用signed关键字。 signed char与“plain” char通常是不同的types,根据实现可能是有符号或无符号types。

C ++ 14 3.9.1 / 1说:

char对象是否可以包含负值是实现定义的。 字符可以显式地声明为unsigned或有signed 。 Plain charsigned charunsigned char是三种不同的types[…]

在其他情况下signed是多余的。


在C ++ 14之前(和C),还有第二个实例:位域。 它是实现定义是否,例如, int x:2; (在类的声明中)与unsigned int x:2; 或者像signed int x:2

C ++ 11 9.6 / 3说:

它是实现定义一个明文(既不明确签名也不是无符号) charshortintlonglong long位域是否有符号或无符号。

但是,因为C ++ 14已经改变了,所以int x:2; 总是表示signed int 。 链接到讨论

int的情况下,没有区别。 它只是与char有所不同,因为

  1. 它没有定义char是有符号的还是无符号的
  2. charsigned charunsigned char是三种不同的types。

所以你应该使用signed如果你需要一个signed char (这可能很less)。 除此之外,我想不出一个理由。

signed是默认的整数types。 所以不,在你给的例子中没有什么区别。 只有在char的情况下才有区别。

来源: C ++参考

两者在int之间没有区别。 如果您还声明了unsigned int,那么您可能会包含单词signed的格式,以便它们更容易排列并且可读,但是对于所有意图和目的,您不需要使用signed关键字。