在没有 C++ 11 的情况下使用 char16_t、char32_t 等?

2024-03-29

我想要固定宽度类型,包括字符类型。<stdint.h>提供整数类型,但不提供字符类型,除非使用 C++11,但我不能这样做。

有没有一种干净的方法来定义这些类型(char16_t, char32_t等)而不与 C++11 定义的冲突,以防源代码与 C++11 混合?

谢谢 :)


我认为,检查是否支持这种类型是一个依赖于平台的事情。例如,GCC 定义:__CHAR16_TYPE__ and __CHAR32_TYPE__如果提供了这些类型(需要 ISO C11 或 C++ 11 支持)。

但是,您无法直接检查它们是否存在,因为它们是基本类型,而不是宏:

在 C++ 中,char16_t 和 char32_t 是基本类型(因此此标头未在 C++ 中定义此类宏)。

但是,您可以检查 C++ 11 支持。根据比亚恩·斯特鲁斯特鲁普 http://www.stroustrup.com/C++11FAQ.html#11 page:

__cplusplus

C++11 中的宏__cplusplus将被设置为不同于(大于)当前 199711L 的值。

所以,基本上,你可以这样做:

#if __cplusplus > 199711L
// Has C++ 11, so we can assume presence of `char16_t` and `char32_t`
#else
// No C++ 11 support, define our own
#endif

如何定义自己的?

->Windows 上的 MSVC、ICC:使用特定于平台的类型 https://msdn.microsoft.com/en-us/library/29dh1w7z%28v=vs.80%29.aspx,在 VS .NET 2003 及更高版本中受支持:

typedef __int16 int16_t;
typedef unsigned __int16 uint16_t;
typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;

->Linux 上的 GCC、MinGW、ICC:这些具有完整的 C99 支持,因此请使用来自<cstdint>并且不要typedef您自己的(您可能想检查版本或特定于编译器的宏)。

进而:

typedef int16_t char16_t;
typedef uint16_t uchar16_t;
typedef int32_t char32_t;
typedef uint32_t uchar32_t;

如何检查正在使用的编译器?使用这个伟大的页面 http://sourceforge.net/p/predef/wiki/Home/ (“编译器”部分 http://sourceforge.net/p/predef/wiki/Compilers/).

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

在没有 C++ 11 的情况下使用 char16_t、char32_t 等? 的相关文章

随机推荐

  • 如何计算给定三个点的抛物线的顶点

    我有三个 X Y 点 形成一条抛物线 我只需要计算经过这三个点的抛物线的顶点是什么 最好是一种快速的方法 因为我必须做很多这样的计算 询问科学家 网站提供这个答案 http www newton dep anl gov askasci ma
  • 如何打印 Node WebKit 版本

    如果我想检查哪个节点WebKit https github com nwjs nw js我正在使用的版本 我将如何从命令行执行此操作 要了解应用程序中node webkit的版本 以便确定某些API是否可用 可以使用 process ver
  • 循环访问 ARM 模板中的值

    我已经花了一天多的时间来解决 ARM 模板遇到的问题 并且似乎陷入困境 所以询问 SO 以防有人可以提供帮助 为了描述该问题 我有一个现有的 Azure Key Vault 设置 并希望向该资源组添加许多访问策略 出于参考目的 以下是用于添
  • 如何使文件系统缓存失效?

    我想测量 优化应用程序的 冷启动 启动性能 如果不实际重新启动就很难做到这一点 这显然不是一个理想的解决方案 有没有一种方法可以使整个系统的文件缓存无效 以便映射的页面访问实际上导致磁盘访问 以便我可以测量程序启动所需的时间 信息 我非常需
  • 如何使用 perl 将完整路径转换为相对路径?

    我在 Perl 程序的两个变量中拥有文件的完整路径和其父目录之一的完整路径 什么是计算文件相对于父目录的相对路径的安全方法 需要在 windows 和 unix 上工作 e g filePath full path to my file p
  • 为什么需要将地图类型转换为列表以将其分配给 pandas 系列?

    我刚刚开始学习 pandas 的基础知识 有一件事让我思考 import pandas as pd data pd DataFrame Column1 A B C data Column2 map str lower data Column
  • 帮助解决 System.BadImageFormatException:

    在通过联系本地 Web 服务的 NET 3 5 SP1 项目进行调试时 我收到了异常 System BadImageFormatException 错误的类令牌 当然 关于导致异常的原因并没有更多细节 我可以看出发生这种情况的方法 与调用者
  • 无法应用插件 [id 'forge']

    这是一个延续这个问题 https stackoverflow com questions 58312064 upgrading gradle我的第一个问题已经解决了 但是新的问题又出现了 按照其中提到的教程 解决了一些错误后 现在当我尝试运
  • 没有收到所有 ICMP 超时消息:为什么?

    我正在使用 Scapy 重播一些转储的数据包 其中我更改了 TTL 值 即使 TTL 1 我也得到了非常奇怪的结果 当我分别运行测试时间时 我可以得到大约 40 到 95 的数据包回复了 ICMP 超时消息 然后 我可以递归地重放未应答的数
  • 使用多个列名的 SQLAlchemy 连接语法

    这是我想要执行的以下 sql 查询 并且在命令行上完美运行 select from table1 join table2 using col1 col2 我无法弄清楚如何使用 SQLAlchemy 执行此操作 任何帮助将不胜感激 表之间没有
  • Boost::asio 和 boost::bind:Functor 内存永远不会被释放

    我的代码正在分配内存并且从不释放它 即使它应该 至少在我看来 标题看起来像这样 typedef boost asio ssl stream
  • 在 VideoView 中显示缩略图的问题

    我正在将 VideoView 用于网络视频 并且我还有一个包含相应缩略图的位图对象 现在我应该如何将位图设置为 VideoView 以显示缩略图 我在用着 videoView setBackgroundDrawable new Bitmap
  • OpenMP:不要使用超线程核心(一半“num_threads()”带有超线程)

    In g 4 7 中的 OpenMP 并行 效率不高吗 5x CPU 时为 2 5x https stackoverflow com questions 36950532 is openmp parallel for in g 4 7 no
  • C# 中可以有同名的公共 getter 和私有 setter 吗?

    如何为属性创建公共 getter 和私有 setter 下面的说法正确吗 public String Password set this password value private String Password get return t
  • Mongoose findOne 通过 _id 嵌入文档

    我正在尝试将菜单推送到嵌入文档 但我在餐厅里没有定义 findOne 我只是想将一些文档推送到餐厅的菜单类别中 正如您在架构中看到的 var RestaurantSchema new mongoose Schema contactTelph
  • Python 服务器客户端 WinError 10057

    我正在使用 Python 3 3 制作服务器和客户端socket模块 我的服务器代码工作正常 但此客户端代码返回错误 这是代码 import socket import sys import os sock socket socket so
  • 如何覆盖 GIN 中的绑定

    我找到了 Guice 的答案重写 Guice 中的绑定 https stackoverflow com q 483087 929804但不知道如何在 GWT 中对 GIN 执行同样的操作 提前致谢 据我所知 不支持 回答您的评论 如果您运行
  • 在 json 中存储 pandas 数据帧时保持列和行顺序

    当使用 to json 将数据存储在 json 对象中并使用 read json 读回时 行和列将按字母顺序返回 有没有办法保持结果排序或在检索时重新排序 你可以使用orient split 它将索引和列信息存储在列表中 并保留顺序 In
  • 每个故事显示不同的开放图对象

    好吧 我不确定我在开放图谱中是否做错了什么 但就是这样 我的开放图谱中有 3 个故事 它们是链接到一种对象类型的三个不同操作 Make A Pledge To gt Cause Create gt Cause Log Expense For
  • 在没有 C++ 11 的情况下使用 char16_t、char32_t 等?

    我想要固定宽度类型 包括字符类型