2023-11-22

有什么区别stdint.h and cstdint?

它们都可以在 MSVC (Visual Studio 2010) 和 gcc-4.5.1 中使用。并且两者都定义了intX_t/uintX_t类型(其中X是类型的大小(以位为单位)。

  • 如果两个标头中的基本原理相同(可移植类型),我必须做出哪些决定来决定其中一个?

The stdint.h定义每个类型时​​没有任何命名空间,cstdint类型在于std命名空间。

  • 是否有任何理由将定义的类型包含或不包含到std命名空间?这两个标题有什么不同?

cstdint没有文件扩展名并使用c字首,stdint.h使用.h扩大。

  • 该标头的命名约定是什么?这c前缀表明这是一个C库?缺少文件扩展名是有原因的cstdint?

C++98 的初衷是你应该使用<cstdint>在 C++ 中,为了避免污染全局命名空间(好吧,不是<cstdint>特别是,它仅在 C++11 中添加,但<c*>一般情况下的标题)。

然而,无论如何,实现仍然坚持将符号放入全局命名空间,并且 C++11 批准了这种做法[*]。所以,你基本上有三个选择:

  • Use <cstdint>并且要么完全限定您使用的每个整数类型,要么将其纳入范围using std::int32_t;等(因为冗长而令人烦恼,但这是正确的方法,就像 C++ 标准库中的任何其他符号一样)
  • Use <stdint.h>(有点糟糕,因为已弃用)
  • Use <cstdint>并假设您的实现会将符号放入全局名称空间中(非常糟糕,因为不能保证)。

在实践中,我怀疑有大量烦人的代码使用了最后一个选项,仅仅是因为在实现中很容易意外地执行此操作<cstdint>将符号放入全局命名空间中。您应该尝试使用第一个。第二个有一个优点,那就是保证将东西放入全局名称空间中,而不是仅仅执行它。我认为这不是特别有用,但如果这是您的首要任务,它可能会节省一些打字时间。

还有第四种选择,#include <cstdint>其次是using namespace std;有时很有用,但有些地方不应该放置using namespace std;。不同的人对这些地方的位置会有不同的想法,但“在头文件的顶层”比“在 cpp 文件的顶层”更糟糕,而“在有限的范围内”更糟糕。有些人从来不写using namespace std; at all.

[*] 这意味着 C++ 标准头允许将内容放入全局命名空间中,但不是必需的。因此,您必须避免与这些符号发生碰撞,但您实际上无法使用它们,因为它们可能不存在。基本上,C++中的全局命名空间是一个雷区,尽量避开它。有人可能会争辩说,委员会已经批准了一项实施实践,其危害性几乎与坚持using namespace std;位于头文件的顶层——区别在于实现仅针对 C 标准库中的符号执行此操作,而using namespace std;也适用于仅 C++ 符号。 C 标准中有一个部分列出了为将来添加标准而保留的名称。将这些名称也视为保留在 C++ 全局命名空间中并不是一个完全愚蠢的想法,但这不是必需的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

的相关文章

随机推荐

  • useState 挂钩的 setState 函数的类型?

    我正在将我的 React 项目转换为 Typescript 我有这样的状态 AdminBlogPostContainer tsx const blogPost setBlogPost useState
  • 在运算符重载中使用可变参数模板是否合法?

    我希望能够写一些这样的东西 struct bar template
  • 终止 postgresql 会话/连接

    如何终止所有 postgresql 连接 我正在尝试一个rake db drop但我得到 ERROR database database name is being accessed by other users DETAIL There
  • 如何通过 MockMvc 使用构造函数注入来测试控制器

    我有一个带有构造函数注入的控制器 RestController RequestMapping user public class MainController private final UserMapper userMapper auto
  • 读取 HTML 对象标签中的数据

    我有一个存储在服务器上的文本文件和一个 HTML 格式的对象 如下所示 我怎样才能阅读内容test txt在 JavaScript 中 到目前为止我所拥有的是 var data document getElementByID data 但我
  • 如何实现单实例Java应用程序?

    有时我看到许多应用程序 例如 msn Windows Media Player 等 它们都是单实例应用程序 当用户在应用程序运行时执行时 不会创建新的应用程序实例 在 C 中 我使用Mutex类 但我不知道如何在 Java 中执行此操作 我
  • 信封上邮票的最大值

    邮票问题是一个数学谜语 它询问如果信件只能容纳有限数量的邮票 并且这些邮票可能只有某些指定的面值 那么不能放在信封上的最小邮资价值是多少 例如 假设信封只能容纳三张邮票 可用的邮票面值为 1 美分 2 美分 5 美分和 20 美分 那么解就
  • Ef Linq 查询超时,但在 SSMS 上相同查询不到 1 秒

    首先我尝试过ARITHABORT OFF在 SSMS 上仍然不到 1 秒 我使用 EntityFrameWork 6 1 3 和 Azure Sql S1 层 我将尝试使用第 3 层 如果有变化 请通知您 我使用 EF Profiler 从
  • 如何列出最近24小时内有数据变化的所有表?

    我们遇到了一个丑陋的问题 平衡器错误地将一些请求重定向到具有与生产数据非常相似的数据的测试实例 现在我知道测试 Postgres 中记录了属于生产的数据 有没有办法列出Postgres中过去24小时内有数据更改的所有表 Postgres 版
  • 基于高效 2D Tile 的照明系统

    在 Java 中为基于图块的引擎进行照明最有效的方法是什么 是否会在图块后面放置黑色背景并更改图块的 Alpha 或者放置一个黑色的前景并改变它的阿尔法 还是其他什么 This is an example of the kind of li
  • iOS动态高度UITableViewCell和heightForRowAtIndexPath

    我在一个大型项目中为我的新 UITableViewCells 使用自动布局 我有一个 TableView 其中每一行的高度是自动计算的 我不使用委托函数heightForRowAtIndexPath 我已经声明了估计的行高 tableVie
  • 如何将.dll导入Android java项目(使用eclipse)

    Java 本机接口 JNI Java 本机接口 JNI 是其中之一 java 的有趣界面使用 Java 本机接口 JNI 可以与其他应用程序一起运行 和图书馆 JNI 是 java 的本机编程接口 是 JDK 的一部分 使用 JNI 您可以
  • 在 Dart 中,使用 new 关键字和直接调用构造函数有什么区别?

    我看到我可以使用 argument MyClassName a b 也 argument new MyClassName a b 我想明白的是newDart 中可选 或者这两个返回完全不同的东西 Dart 2 0 强模式下new 和 con
  • Twig_Error_Syntax 表示“未知过滤器”,在 Timber 中带有 Twig 过滤器

    这一定很简单 但我看不出有什么问题 我正在使用简单的过滤器示例https twig symfony com doc 1 x advanced html filters使用 Timber 中的 Twig 1 34 这是一个 WordPress
  • 如何使用 Android 版 Glide 压缩和降低图像质量

    我正在使用 Glide 库上传图像 在另一个应用程序中 我使用此代码 void imageButtonclick iv1 setOnClickListener new View OnClickListener Override public
  • 在分页函数中使用 limit 参数

    是否可以在 paginate 函数中使用 limit 参数 我正在尝试这个 users gt where gt limit 50 gt paginate page 现在 如果数据库中有 100 个用户 那么 paginate 函数的响应将是
  • Android HILT SingletonComponent 与 GoF Singleton 实例设计模式

    在 Android 项目中 有一个外观作为单例实现 我认为使用 HILT SingletonComponent 将其转换为 DI 是一个更好的主意 Module InstallIn SingletonComponent class obje
  • 获取 WindowRef 的边界?

    我正在尝试找到一个 Carbon API 它可以从窗口 id 中为我提供 WindowRef 并且通过该 windowref 我想要有边界吗 编辑 我找到了API extern WindowRef HIWindowFromCGWindowI
  • Skylake L2 缓存通过减少关联性增强?

    In 英特尔的优化指南在第 2 1 3 节中 他们列出了 Skylake 中缓存和内存子系统的许多增强功能 重点是我的 Skylake微架构的缓存层次结构有以下 增强功能 与前几代相比 缓存带宽更高 通过扩大的缓冲区可以同时处理更多的负载和
  • 有什么区别stdint h and cstdint 它们都可以在 MSVC Visual Studio 2010 和 gcc 4 5 1 中使用 并且两者都定义了intX t uintX t类型 其中X是类型的大小 以位为单位 如果两个标头