【问题标题】:Should I use int or long in C++? [duplicate]我应该在 C++ 中使用 int 还是 long? [复制]
【发布时间】:2015-04-19 12:10:04
【问题描述】:

虽然int 的大小取决于 CPU,但long 似乎是 32 位 (?)。但是对于大小并不重要的数字使用 int 似乎非常直观,例如在 for 循环中。

C++ 同时具有long__int32 也令人困惑。那么第二个是什么?

问题:在什么情况下我应该使用什么数字类型?

【问题讨论】:

  • 不,long 并不总是 32 位...
  • long 不小于 int。至少 32 位。
  • 我真的很喜欢 C# 的数据类型。它们总是一样的,无处不在。在 C++ 中,我什至不确定是否应该使用 int
  • 标准库中有fixed-size integers
  • 如果 C++ 标准要求类型的固定大小,那么创建一个 12、18、24、36 等位系统的编译器将是一件痛苦的事情。 __int32__int64 不是标准类型

标签: c++ int


【解决方案1】:

intlong 都没有固定大小(或根本没有任何固定表示),只要它们可以保持特定的值范围(包括 long 不能小于 int) .

对于具体尺寸,有int32_t等一些类型(可能相同)。

而且__int32 不是标准 C++,而是编译器特定的东西(例如 MSVC)

【讨论】:

  • 如果和标准的int32_t一样,微软为什么要加__int32
  • 我认为 int32_t 实现了 __int32 的广告 typedef
  • 如果我想要 32 位,我应该使用什么?
  • 我的意思是__int32是msvc编译器的原生类型,通过原生类型实现的标准类型
  • @bytecode77 Why did Microsoft add __int32 谁知道...但是 MSVC 有很多非标准的东西(而“忘记”实现一些标准的东西大约 16 年...)
【解决方案2】:

标准规定,long 不短于 int - 在 C++ 标准 §3.9.1 中指定

C++11 引入了具有固定字节数的整数,例如 int32_t

【讨论】:

  • 头文件 在 c++11 之前很久就可以使用了。
【解决方案3】:

请注意,即使在许多 64 位架构/编译器组合上,int 也是 32 位(据我所知,gcc 和 MSVC 的 64 位版本都使用 32 位)。另一方面,long 在 64 位编译器上通常是 64 位(但在 Windows 上不是)。

这些只是指导方针,您始终必须查看编译器手册以了解这些数据类型是如何定义的。

【讨论】:

  • 有人能解释一下为什么这被否决了吗?
猜你喜欢
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 2013-07-12
  • 2022-12-15
  • 2014-09-11
  • 2013-01-30
  • 2011-08-08
相关资源
最近更新 更多