放置unsigned关键字

时间:2014-01-15 17:43:07

标签: c++

unsigned int a;

相同
int unsigned a;

即我想知道的,在以下代码中:

typedef int unsigned my_uint32;

'unsigned'“引用”my_uint32或int?它和

一样
typedef unsigned int my_uint32;

4 个答案:

答案 0 :(得分:3)

要恢复,语法为:

typedef keywords alias;

因此typedef unsigned int my_uint32typedef int unsigned my_uint32;相同。

定义自己的类型时可能会小心。在你的情况下,你想要一个4字节类型,你应该使用在stdint.h(uint32_t)中定义的类型,如果你在C中编码,或者在cstdint中,如果你用C ++编码,因为'int'是“至少4个字节”而不是在每种情况下“4个字节”。

答案 1 :(得分:1)

首先,您无法创建标记为unsigned / signed的自己的类型,因此可以应用于预先存在的类型。

其次,是的,交换该限定符的位置是有效的:

  

[C++11: 7.1.6.2/3]:当允许多个简单类型说明符时,它们可以按任何顺序与其他 decl-specifiers 自由混合。 [..]

因此,两个声明是等效的。

答案 2 :(得分:1)

C ++声明(在最简单的情况下)由两部分组成: 声明说明符和声明符。一切都达到了 无论是宣布什么或第一个“运营商”(例如*&)是声明说明符的一部分,其中包含顺序 无所谓。所以你可以自由地写下这样的东西:

int const unsigned static i;

(如果您不关心您的同事对您的代码的看法)。

C已弃用存储类说明符staticextern等等,但在第一个位置,这是 自C早期以来普遍接受的公约 其余的:

  • 我一直看到修饰符在基本类型之前(例如 unsigned int), 出现基本类型时。大部分的 我工作过的地方只使用unsigned,而不是。{ unsigned int

  • 我也经常看到signed / unsigned在任何前面 长度修饰符:unsigned long,而不是long unsigned

  • constvolatile的位置往往会有所不同。大多数 我知道的更有经验的程序员把它放在最后 声明说明符,但这是一个有点近期 发展,很多人继续使用旧的 约定,并在存储类之后立即放置它 说明符。

对于除存储类说明符之外的所有内容,这是公平的 随心所欲;关于我所说的唯一其他规则是普遍的 没有拆分实际的类型信息,就像我在我的 示例

答案 3 :(得分:0)

声明是等效的。