【问题标题】: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
相关资源
最近更新 更多