【问题标题】:passing number of type long long into a function (reference vs value) (C++)将 long long 类型的数量传递给函数(引用与值)(C++)
【发布时间】:2013-04-03 19:59:15
【问题描述】:

我不熟悉使用非双精度数或整数的数字。我知道传递 int 或 double 应该按值传递(考虑到内存/速度),但我不确定如何将 long long 数据类型传递给函数。

基本上,一个 long long 数字是否足够大,通过 const 引用传递它比通过值传递它更快?

【问题讨论】:

  • double 通常至少是那个大小。
  • 价值是最好的。您应该按值传递大多数 POD。将 const 引用视为避免调用复制构造函数的一种方式。
  • 对不起,我应该澄清一下我使用的是 long long 因为我需要精确的值,而且我被告知在处理双精度数或浮点数时实际上会出现一些错误。不过谢谢!如果它类似于双精度值,我将使用按值传递。
  • 如果您认为自己是新人,我建议不要担心可能会进行非常小的优化。
  • 在 64 位系统上(越来越普遍),long long 可能与指针大小相同。

标签: c++ parameter-passing long-integer


【解决方案1】:

考虑到 long long 需要 64 位并且差异很小,应该只是 可以按值传递。

通常,对于一个类或结构,通过 const 引用传递是一种有效或更好的方法,但是当类或结构的大小很小时,事情就变得棘手了,因为引用可能会引入额外的内存寻址和访问成本.

【讨论】:

  • 至少 64 位,不过我怀疑还有什么不同。
  • @chris,不正确,§3.9.1 P2 中的标准状态:有五种标准有符号整数类型:“signed char”、“short int”、“int”、“long int” , 和“long long int”。在此列表中,每种类型提供的存储空间至少与列表中它前面的类型一样多。也可能有实现定义的扩展有符号整数类型。标准和扩展的有符号整数类型统称为有符号整数类型。普通整数具有执行环境架构所建议的自然大小44;提供其他有符号整数类型以满足特殊需要。
  • @NathanErnst,它还依赖于 C 标准的最小类型范围,包括 long long,它声明它必须至少支持 [-(2^63-1) 的范围, 2^63-1].
【解决方案2】:

是否更快取决于您的编译器和计算机架构。 long long 并不总是在编译器上可用——尤其是 32 位编译器。 通常我会说你可能不会注意到速度差异,除非你经常调用函数非常

大小是否接近双倍或浮点也取决于您的编译器。但是long longdouble 出现任何计算错误的可能性都一样大——只有错误的大小不同(如果有的话)。

不过,对于您所描述的 - 我会说按价值传递。本质上,我建议仅在您需要修改值并且需要将该更改传播回调用函数时才通过引用传递 - 而无需返回值。

【讨论】:

  • long long 是 C++11 的标准类型。编译器在是否支持它方面没有太多选择。
  • 如果您使用 C++11 编译...对于 C 或更早的 C++ 修订版,他们不需要定义它。没有什么能迫使他们真正实现 C++11。所以,如果这是投反对票的原因 - 我不明白。
  • 我不会为这样微不足道的事情投反对票。
  • 好的 - 那么其他人,谁不会费心说出原因,投了反对票。
猜你喜欢
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
  • 2020-01-21
  • 2011-09-30
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多