在带有或不带有命名空间的 中使用类型

2024-04-15

在 C++11 中,我可以选择是否要使用带或不带命名空间 std:: 中定义的类型

至少我的编译器(g++ 4.7)接受这两种变体。

我的问题是:使用 cstdint 中的 typedef 的推荐方法是什么。有或没有命名空间?有什么优点或缺点?或者这只是风格问题?

所以变体a):

#include <cstdint>
std::uint8_t n = 21;

resp:

#include <cstdint>
using std::uint8_t;
uint8_t n = 21;

或变体b):

#include <cstdint>
uint8_t n = 21;

首选在中声明的名称std命名空间。原因在 §17.6.1.3/4 中给出(ISO/IEC 14882:2011(E),C++11):

除第 18 条至第 30 条和附录 D 中注明的情况外,每个标头的内容cname应与相应的标头相同name.h,如 C 标准库 (1.2) 或 C Unicode TR 中所指定(视情况而定),就像通过包含一样。然而,在 C++ 标准库中,声明(除了在 C 中定义为宏的名称)位于命名空间的命名空间范围 (3.3.6) 内std。未指定这些名称是否首先在全局命名空间范围内声明,然后注入命名空间std通过显式使用声明(7.3.3)。

如果您使用来自<cname>标题没有std,您的程序依赖于未指定的要求。

这在 C++03 及更早版本中有所不同,其中名称只应该出现在std命名空间。然而,现实情况是,许多实现只是简单地注入 C 标准库头文件的内容<name.h> into std所以这在 C++11 中得到了解决。 C++03 标准中的相应部分 (§17.4.1.2/4) 表示:

除非第 18 至 27 条中另有说明,否则每个标头的内容cname应与相应的标头相同name.h,如 ISO/IEC 9899:1990 编程语言 C(第 7 条)中指定,或 ISO/IEC:1990 编程语言 — C 修正案 1:C 完整性(第 7 条),视情况而定,如同通过包含一样。然而,在 C++ 标准库中,声明和定义(除了在 C 中定义为宏的名称)位于命名空间的命名空间范围 (3.3.5) 内std.

除此之外,限定名称std::有助于避免碰撞——如果你完全限定它,你就确切地知道你会得到什么。如果你真的要做using namespace std or using std::something,至少在尽可能小的范围内做到这一点。

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

在带有或不带有命名空间的 中使用类型 的相关文章

  • getline 之后返回到文件开头

    所以我已经从文件中读取了所有行 while getline ifile line logic 其中 ifile 是 ifstream line 是字符串 我的问题是我现在想再次使用 getline 并且似乎无法返回到文件的开头 因为运行 c
  • strtok() 使用安全吗[重复]

    这个问题在这里已经有答案了 我读到了很多负面的东西strtok 有人说它已经过时 有人说它不是线程安全的 等等 那么真相是什么 我可以使用吗strtok 它是线程安全的吗 Note 我正在使用 Visual C 您可以使用它 它是标准库的一
  • 如何通过覆盖 MSBuild 目标来防止外语资源生成?

    我正在致力于减少大型 C ASP NET 解决方案的编译时间 我们的解决方案使用通常的 resx 文件方法翻译成大约十几种外语 这些资源文件的解析和编译极大地减慢了我们的编译时间 并且是日常的挫败感 我知道可以创建自定义资源提供程序并摆脱
  • 头文件中实现的函数的静态与内联

    我想到的方式inline在 C 中用于链接 作用域 我把它放在同一个篮子里extern and static对于全局对象 通常 对于在头文件中实现的函数 我的首选解决方案是将其设为静态 In Foo h static void foo Do
  • C# 中类似图的实现

    所以我有一个对象 我们称之为 Head 它有一个对象列表 C C1 C2 C3 T T1 T2 和 M M1 M2 并且所有这些都是相互关联的 例如 Head gt C1 C2 C3 T1 T2 M1 M2 T1 gt C1 C2 T2 g
  • 对 ExecuteNonQuery() 的单次调用是原子的

    对 ExecuteNonQuery 的单次调用是否是原子的 或者如果单个 DbCommand 中有多个 sql 语句 那么使用事务是否有意义 请参阅我的示例以进行说明 using var ts new TransactionScope us
  • 预编译头和 Visual Studio

    有没有办法设置 Visual Studio 解决方案参数 以便它只创建预编译头而不构建整个解决方案 具体来说 它是一个巨大的 C 解决方案 本身有许多项目 谢谢 仅选择 pch 创建者源文件 通常是 stdafx cpp 然后编译该文件 C
  • 选择initializer_list迭代器定义

    Why std initializer list
  • 在 .NET Core 中从 HttpResponseMessage 转换为 IActionResult

    我正在将之前在 NET Framework 中编写的一些代码移植到 NET Core 我有这样的事情 HttpResponseMessage result await client SendAync request if result St
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • 检查两个函数或成员函数指针的签名是否相等

    我编写了一些代码来检查自由函数的签名是否等于成员函数的签名等 它比较提取的返回类型和函数参数 include
  • 列表到优先队列

    我有一个 C 大学编程项目 分为两个部分 在开始第二部分时应该使用priority queues hash tables and BST s 我 至少 在优先级队列方面遇到了麻烦 因为它迫使我自己重做第一部分中已经实现的许多代码 该项目是关
  • 本地时间的内存需要释放吗?

    void log time t current time 0 tm ptm localtime current stuf 只是想确定 我是否需要在方法结束时释放 tm 指针分配的内存 不 你不应该释放它 该结构是静态分配的 检查文档 htt
  • 如何禁用基于 ValidationRule 类的按钮?

    如何禁用基于 ValidationRule 类的 WPF 按钮 下面的代码可以很好地突出显示 TextBox
  • 在特定线程上运行工作

    我想要一个特定的线程 任务队列并在该单独的线程中处理任务 应用程序将根据用户的使用情况创建任务并将其排队到任务队列中 然后单独的线程处理任务 即使队列为空 保持线程活动并使用它来处理排队任务也至关重要 我尝试过几种实现TaskSchedul
  • 如何释放字符串未使用的容量

    我正在程序中处理很多字符串 这些字符串数据在读入我的程序后的整个生命周期内都不会改变 但由于 C 字符串保留了容量 因此浪费了大量肯定不会被使用的空间 我尝试释放这些空间 但没有成功 以下是我尝试过的简单代码 string temp 123
  • C - 获取外部IP地址

    我需要通过 C C 调用获取我的公共 IP 地址 我知道作为替代方案 我可以从 http whatismyip akamai com 等外部链接获取 我写了一个示例来获取外部IP地址 但我的程序没有返回外部 IP 地址 我正在获取内部 IP
  • 检查一个数是否是完全平方数?

    我认为以下代码存在精度问题 bool isPerfectSquare long long n long long squareRootN long long sqrt n 0 5 return squareRootN squareRootN
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir
  • 如何通过API退出Win32应用程序?

    我有一个使用 Win32 API 编写的 C Win32 应用程序 我希望强制它在其中一个函数中退出 有没有类似的东西Exit or Destroy or Abort 类似的东西会终止它吗 哎呀呀呀呀呀呀 不要做任何这些事情 exit 和

随机推荐

  • 仅处理天数时,“datetime.timedelta”和“dateutil.relativedelta.relativedelta”之间有什么区别?

    有什么区别datetime timedelta http docs python org library datetime html timedelta objects 来自Python的标准库 和dateutil relativedelt
  • 按最大(时间)mysql分组

    首先 这有点重复 按最大日期分组 https stackoverflow com questions 18221999 group by having max date 18222124 noredirect 1 comment385131
  • 用 t 个随机数生成位向量

    我想生成一个数组 向量v大小的p with t那些和p t零 的位置t ones must是随机的 这是我迄今为止编写的解决方案 但我不确定它是否是最有效的解决方案 另外我从来没用过random device or mt19937 找到他们
  • 带分钟的 DATEDIFF 不返回预期值

    假设我有以下包含数据的 SQL Server 2008 表 CREATE TABLE tbl dtIn DATETIME2 dtOut DATETIME2 INSERT tbl VALUES 9 10 2012 5 14 10 AM 9 1
  • 如何让Stata在表格中报告零

    我正在尝试使用tabulateStata 中的命令创建频率时间序列 当我尝试合并输出时 问题就出现了tabulate运行完每个日期后 tabulate当相关变量的值不存在观察值时 不会将 0 作为条目包含在内 例如 如果我想在三年内统计一个
  • 整数或布尔值的 TensorFlow 占位符变量不起作用

    我在 TensorFlow 中使用以下代码片段有条件地从一个或另一个源提取数据 if name main with tf device gpu 0 with tf Graph as default with tf variable scop
  • 二元矩阵查找距离为 k 的所有单元格

    我有一个二进制矩阵0 and 1 并给定整数 K gt 0 现在我想找到所有可能的单元格 这些单元格与具有该值的单元格的最大距离为 K1并将它们标记为某个字母 x 单元格 A 5 2 和 A 1 4 之间的距离为 1 5 4 2 6 Exa
  • Maven 2 可以在同一项目中使用两个不同版本的构建插件吗?

    我的项目需要新版本的 Maven 构建插件的功能some的目标 但新版本在其他目标之一上失败了 由于插件中的错误 作为修复错误之前的解决方法 我想使用旧版本的插件运行损坏的目标 Edit 更具体地说 我需要使用 gwt maven plug
  • Typescript 接口中的日期在检查时实际上是字符串

    不幸的是 重现这个问题的总代码会很广泛 所以我希望我的问题是显而易见的 我可以轻松提供 如果需要 我会发布更完整的解决方案 首先 我定义一个接口 export interface ITest myDate Date 然后我创建一个数组用于测
  • 宽度和高度似乎不适用于:在伪元素之前

    Here http jsfiddle net C7rSa 是一把小提琴 p foo a class infolink href bar a baz p and a infolink before content background blu
  • C# 有没有办法设置控制台应用程序的滚动位置

    你好 我已经在谷歌上搜索这个问题很长一段时间了 但找不到任何关于我将如何做这件事的结果 我目前有一个选择菜单 用户可以从中选择选项列表 该菜单从顶部开始 但每次刷新列表时窗口都会显示最后一个选项 我想要做的就是能够在窗口中显示带有所选选项的
  • 如何将 bash 脚本变量与 sed 一起使用[重复]

    这个问题在这里已经有答案了 我执行以下 bash 脚本 bin bash version 1 echo version sed s version number version template txt gt readme txt 我希望用
  • 设置今日扩展小工具的通知

    我正在创建一个简单的计时器应用程序 它将重点关注今天的扩展小部件功能 用户可以通过点击从此处启动计时器 唯一的问题是我需要从小部件设置本地通知 我尝试使用 UIApplicaton sharedApplication ScheduleLoc
  • 按组填写缺失日期

    我有一个数据集 如下所示 shop id item id time value 150 1 2015 07 10 3 150 1 2015 07 11 5 150 1 2015 07 13 2 150 2 2015 07 10 15 150
  • 使用 JUnit 中的 Blobstore

    我正在尝试测试一些使用 Blobstore API 的代码 但我并不真正了解如何将一些文件放入 Blobstore 中 以下内容不起作用 private BlobKey createBlob String path throws Excep
  • 如何使用 HttpClient 解决 .Net4.0 与 .Net4.5 中 Uri 和编码 URL 的差异

    Uri Net4 0 与 Net4 5 中的行为不同 var u new Uri http localhost 5984 mycouchtests pri test 2F1 Console WriteLine u OriginalStrin
  • Postgres 动态创建序列

    我正在编写一个应用程序 其中有多个用户 用户可以在应用程序内上传报告 目前 我有一个 报告 表 其中包含所有提交的报告 其中有一个 id 字段 该字段是表上的序列主键 我指定的要求是 用户需要能够指定其报告开始计数的前缀和数字 例如 用户应
  • 每页记录数允许用户选择 - codeigniter 分页

    我有有效的分页功能 我已将限制设置为每页 5 条记录 但我希望用户能够根据需要进行更改 问题是我不知道该怎么做 在视图中 我创建了下拉菜单 因此用户可以选择他想要每页查看多少条记录 ul class dropdown menu li a h
  • android 权限 - CHANGE_COMPONENT_ENABLED_STATE

    我需要在我的代码中使用 android permission CHANGE COMPONENT ENABLED STATE 权限 因为我需要更新我的项目的另一个 apk 的组件 但它似乎并不真正适合我 这是我的代码
  • 在带有或不带有命名空间的 中使用类型

    在 C 11 中 我可以选择是否要使用带或不带命名空间 std 中定义的类型 至少我的编译器 g 4 7 接受这两种变体 我的问题是 使用 cstdint 中的 typedef 的推荐方法是什么 有或没有命名空间 有什么优点或缺点 或者这只