【问题标题】:Omitting the datatype (e.g. "unsigned" instead of "unsigned int")省略数据类型(例如“unsigned”而不是“unsigned int”)
【发布时间】:2023-03-15 03:20:01
【问题描述】:

我知道如果在 C/C++ 代码中以这种方式省略数据类型声明:unsigned test=5;,编译器会自动将此变量设为 int(在这种情况下为无符号 int)。我听说它是​​ C 标准,适用于所有编译器。

但是我也听说这样做被认为是一种不好的做法。

你怎么看?我真的应该输入unsigned int 而不仅仅是unsigned吗?

short、long 和 long long 也是数据类型吗?

【问题讨论】:

  • 刚刚看到它被使用并来这里询问完全相同的事情。不喜欢它,但它就在那里。

标签: c++ c types


【解决方案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更简洁,因为它更简洁。
    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    相关资源
    最近更新 更多