“signed”关键字的实际用途是什么?

时间:2015-01-18 17:59:02

标签: c++

我知道无符号整数只是正数(和0),并且与普通int相比可以加倍。

之间有什么区别吗?
int variable = 12;

signed int variable = 12;

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

4 个答案:

答案 0 :(得分:90)

只有一个实例可能需要使用signed关键字。 signed char总是与" plain"不同的类型。 char,可能是签名或无符号类型,具体取决于实现。

C ++ 14 3.9.1 / 1说:

  

实现定义char对象是否可以保存负值。可以明确声明字符unsignedsigned。简单charsigned charunsigned char是三种不同的类型[...]

在其他情况下,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 intLink to discussion

答案 1 :(得分:8)

int的情况下,没有区别。它只对char产生影响,因为

  1. 未定义char是签名还是未签名,
  2. charsigned charunsigned char无论如何都是三种不同的类型。
  3. 因此,如果您需要signed(可能很少),则应使用signed char。除此之外,我想不出一个理由。

答案 2 :(得分:4)

signed是默认的整数类型。所以不,你给出的例子没有区别。仅在char的情况下存在差异。

来源:C++ Reference

答案 3 :(得分:0)

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