【问题标题】:Using short and long instead of int and double (C++)使用 short 和 long 而不是 int 和 double (C++)
【发布时间】:2017-10-24 00:01:39
【问题描述】:

使用 short 和 long 代替 int 和 double 有什么好处吗?除了 int 和 double 占用更多存储空间? 我的教授不加解释地惩罚使用 int 和 double 的代码。在我使用的几本教科书中,我并没有真正找到一个很好的理由。它们在哪里更有用? 例如,这是我的代码中的许多函数之一

    void randDir(int& x, int& y){
            do{
                x = rand() % 4 - 1;
                y = rand() % 4 - 1;
                if(x == 2) x=0;
                if(y == 2) y=0;
            }while(x == 0 && y == 0);
  }  

这就是我的教授想要的

    void randDir(short& x, short& y){
    do{
        x = rand() % 4 - 1;
        y = rand() % 4 - 1;
        if(x == 2) x=0;
        if(y == 2) y=0;
    }while(x == 0 && y == 0);
}

【问题讨论】:

  • 如果你想知道你的教授为什么以某种方式评分,直接问他们。我们不知道那位教授的想法,也不知道您正在学习的课程或您目前可能正在学习的课程的哪一部分。
  • 视为“普通ints 具有执行环境架构所建议的自然大小;提供其他有符号整数类型以满足特殊需求”(C++ 标准,[basic .fundamental]/2),惩罚使用int 似乎是,容我们说,被误导了。 double 是另一回事——你不想无缘无故地使用浮点数。 doublelong 完全不同。
  • 你的意思是“short and float”吗?
  • int 曾经是 native word 类型。在许多嵌入式系统的编译器上,它仍然是。它也是标准的整数类型(例如,professor 函数中的许多操作将使用int 执行,然后转换为short)。我认为您应该向您的教授询问该规则的基本原理。在非嵌入式系统(如现代 PC)上编程 C++, 使用 int 是没有意义的。
  • 教授可能假设 RAND_MAX 是 32767 并且不需要比 short 更大的任何东西来表示。不幸的是,他们错了。 32767 是RAND_MAX 的最小值,因此将rand 的输出塞进一个短的是有风险的。最好与导师确认。

标签: c++


【解决方案1】:

使用short 的唯一好处是占用的空间更少。如果您正在为内存非常紧张的环境编程,或者您有大量数字,或者您的数据将离开程序的地址空间(例如要保存到磁盘或通过网络)那么这可能很重要。在其他情况下,由于处理器架构的设计方式,不必要地使用 int 以外的类型实际上可能减慢您的程序。例如:

如果您需要一个与您认为 short 的大小完全相同的类型,为了存储一些位模式或类似的东西,您应该使用精确宽度类型之一,例如 std::int16_t,而不是short。所以这通常不是使用short 的正当理由。

您的 C++ 讲师很可能很久以前就在每个字节都很重要的环境中学习编码,并错误地认为现在仍然如此。可悲的是,这种先入为主的观念非常普遍。 (其他症状包括禁止异常和禁止使用标准库容器)。在这种情况下,您通常应该意识到聪明人经常会说愚蠢的话。 Stack Overflow 是获取有关当前最佳实践的信息的好地方,这里列出的书籍也是如此:The Definitive C++ Book Guide and List

【讨论】:

  • 是否有任何规则阻止编译器使用 32 位 short 类型?
  • @ThomasMatthews 没有,这就是为什么当您需要精确宽度的类型时,您永远不应该使用 shortintlonglong long
猜你喜欢
  • 2013-09-25
  • 2016-12-16
  • 2013-01-09
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 2020-04-08
相关资源
最近更新 更多