【问题标题】:Typecasting from int to long int从 int 到 long int 的类型转换
【发布时间】:2016-06-24 10:52:14
【问题描述】:

最近搜索了intlong intlong、...等的区别。我从here 得到了答案。我发现longlong int 是相同的。所以声明 c = a *long(b);

c = a * long int (b)

在程序中应该是一样的

int main()
{
    int a = 10, b = 20;
    long int c;
    
    c = a *long(b);
    cout << c;
    
    return 0;   
}

但第二条语句显示错误

[错误] 'long' 之前的预期主表达式

所以我只想知道,如果longlong int 相同,那么为什么上面两个语句有错误?

【问题讨论】:

  • @πάνταῥεῖ 你运行错误的代码哈哈
  • @LightnessRacesinOrbit 哦,OP 骗了我:-P ...

标签: c++ int long-integer typecasting-operator


【解决方案1】:

仅仅因为它们是同一类型并不意味着您可以在源代码中交换字符。

T 中有空格时,语法会被T() 转换混淆。

改为写c = a * (long int)b

【讨论】:

  • 好一个。应该提到(long int) 是C 方式,而static_cast&lt;long int&gt; 是C++ 方式。
  • @Benoit:两者都在 C++ 中有效。
  • 您似乎对 c++ 非常有经验。我想知道你所说的“有效”是什么意思。在职的 ?可以接受吗?还是完全合适?我发现的所有参考资料都说“不要在 c++ 中使用类似 C 的强制转换”。我无法打开一个问题,因为它会被标记为重复,但我阅读了很多你的帖子,我真的很好奇你对此的看法。
  • @Benoit:它不是非常地道,特别是对于复杂类型,但就我而言,它对于算术类型来说完全没问题。有些人会坚持使用static_cast,但在这种情况下,它是不必要的冗长。事实上,这只是前几天出现的:stackoverflow.com/a/37996003/560648
  • 谢谢!这正是我一直在寻找的那种解释和“战斗”。
【解决方案2】:

为此使用括号。 例如。

c = a * (long int) (b)

由于类型转换的数据类型有多个单词。

【讨论】:

  • 这在上一个答案中已经介绍过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多