省略数据类型(例如“unsigned”而不是“unsigned int”)
Posted
技术标签:
【中文标题】省略数据类型(例如“unsigned”而不是“unsigned int”)【英文标题】:Omitting the datatype (e.g. "unsigned" instead of "unsigned int") 【发布时间】:2011-05-17 23:32:11 【问题描述】:我知道如果在 C/C++ 代码中以这种方式省略数据类型声明:unsigned test=5;
,编译器会自动将此变量设为 int(在这种情况下为无符号 int)。我听说它是 C 标准,适用于所有编译器。
但是我也听说这样做被认为是一种不好的做法。
你怎么看?我真的应该输入unsigned int
而不仅仅是unsigned
吗?
short
、long
和 long long
也是数据类型吗?
【问题讨论】:
刚刚看到它被使用并来这里询问完全相同的事情。不喜欢它,但它就在那里。 【参考方案1】:unsigned
是一种数据类型!它恰好别名为unsigned int
。
当您编写 unsigned x;
时,您不会省略任何数据类型。
这与 C 中存在的“默认 int
”完全不同(但在 C++ 中不存在!),您在声明中确实省略了类型,C 会自动推断该类型为 int
。
至于风格,我个人更喜欢明确,因此写unsigned int
。另一方面,我目前参与了一个图书馆,它的惯例是只写unsigned
,所以我这样做了。
【讨论】:
+1:对。unsigned
实际上只是 unsigned int
的别名
感谢您的回答。那么是short
、long
和long long
数据类型吗?
@rhino:是的。您提到的每个数据类型都是不同的数据类型
在 C99 中,unsigned
是 unsigned int
的别名,其方式与 C++ 相同(第 6.7.2 节)。
+1 表示偏好显式声明但遵循编码标准。【参考方案2】:
我什至会更进一步,使用 stdint 的 uint32_t 类型。 这可能是一个品味问题,但我更愿意知道我使用的是什么原语,而不是一些古老的针对每个平台进行优化的考虑。
【讨论】:
但std::uint32_t
不是“原始”。它是一个可选的 typedef
类型,它必须恰好有 32 位并且可能是也可能不是原语。【参考方案3】:
正如@Konrad Rudolph 所说,unsigned
是一种数据类型。它实际上只是unsigned int
的别名。
关于使用unsigned
是不好的做法的问题?我会说不,使用unsigned
作为数据类型说明符没有任何问题。专业人士不会对此感到困惑,在我看来,任何说你必须使用unsigned int
的编码标准都是不必要的严厉。
【讨论】:
【参考方案4】:无端冗长被认为是有害的。 我永远不会写 unsigned int
或 long int
或 signed
任何东西(char
或位域除外),因为它会增加混乱并减少有意义的代码量您可以容纳 80 列。 (或者更有可能,鼓励人们编写不适合 80 列的代码......)
【讨论】:
我发现人们为了满足 80 个字符的限制而简单地分行会损害可读性。冗长有它的位置。某人接受的冗长程度取决于他们的口味。我自己倾向于在冗长和明确方面犯错。 我发现分行也会损害可读性,但不会超过水平滚动。因此,最好的办法是避免用无意义的字符填充空间(并同时避免两者)。 “我永远不会写unsigned int
”我也不会! ...“或signed
”这个我不确定;为了与unsigned
对称,我倾向于写signed
而不是int
……但确实有一点,int
更简洁,因为它更简洁。以上是关于省略数据类型(例如“unsigned”而不是“unsigned int”)的主要内容,如果未能解决你的问题,请参考以下文章
unsigned char 和 signed char 区别
使用 GLuint 而不是 unsigned int 有啥好处?
MySQL 数据类型 INT(11) 而 UNSIGNED INT(10)?