【问题标题】:long long to int and int to long long conversionlong long 到 int 和 int 到 long long 的转换
【发布时间】:2016-10-21 10:55:47
【问题描述】:

我想知道转换是否像:

int to long

int to long long

long to int

long long to int

long long to long

long to long long

和

long double to double

double to long double

(对于无符号也是类似的)是昂贵的操作。我们是否应该担心这种转换并为赋值定义正确的类型? (当然有损失精度的风险,但我不写它。我问的是性能)。

例如,如果我确定该号码可以存储在 int 类型中。我必须在函数中分配一些东西,例如:void writeToX(long long& x)。

传递给函数long long x而不是int x重要吗?

【问题讨论】:

  • 顺便说一句,你不能将int x;传递给void foo(long long&)。
  • 您为什么不尝试一下并找出答案?查看汇编或创建一个测试程序,看看它是否运行得更慢。
  • "传递给函数 long long x 而不是 int x 重要吗?"使用正确大小的变量很重要。

标签: c++ c++11 type-conversion


【解决方案1】:

您应该始终努力避免类型转换,因为它们通常表明编程风格不佳。

这与转换操作的成本无关,但请注意,您列出的其中一些转换 - 特别是浮点到整数类型的转换 - 并不是特别便宜。

在 C++ 中,转换为无法保存值的类型的行为通常是未定义的。所以一个安全的转换往往需要通过大小检查来实现,这只会增加开销。

【讨论】:

  • “大小检查,只会增加开销” - 断言是你的朋友,因为你可以避免只将开销应用于调试构建
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
相关资源
最近更新 更多