当前位置: 首页 > article >正文

现代C++特性(一):基本数据类型扩展

文章目录

  • 基础数据类型
  • long long (C++ 11)
  • numeric_limits()获取当前数据类型的最值
  • warning C4309: “=”: 截断常量值
  • 新字符类型char16_t和char32_t
  • Windows编程常用字符类型wchar_t
  • char8_t (C++ 20)


基础数据类型

C++中的基本类型是构建其他数据类型的基础,常见的基础类型包括整型,浮点型,字符型和布尔型:

  • 整型:用于表示整数,如 intshortlong 等。
  • 浮点型:用于表示带小数部分的数值,如 floatdouble 等。
  • 字符型:用于表示单个字符,如 char
  • 布尔型:用于表示逻辑值,只能取 truefalse
类型说明符等效类型通常位宽 (bits)最小范围 (bits)描述
char / signed charchar88单个字符,至少 8 位。
unsigned charunsigned char88无符号字符,至少 8 位。
short / short int / signed short / signed short intshort1616短整型,至少 16 位。
unsigned short / unsigned short intunsigned short1616无符号短整型,至少 16 位。
int / singed / signed intint3216整型,至少 16 位,但通常为 32 位
unsigned / unsigned intunsigned int3216无符号整型,至少 16 位,但通常为 32 位8。
long / long int /signed long /signed long intlong32 或 6432长整型,至少 32 位,具体取决于平台(例如,在 64 位系统上通常是 64 位)9。
unsigned long / unsigned long intunsigned long32 或 6432无符号长整型,至少 32 位,具体取决于平台10。
long long / long long intlong long6464非常长的整型,至少 64 位11。
unsigned long longunsigned long long6464无符号非常长的整型,至少 64 位12。
floatfloat32-单精度浮点数,通常为 32 位13。
doubledouble64-双精度浮点数,通常为 64 位14。
long doublelong double平台相关-扩展精度浮点数,位宽依赖于平台(通常为 80 或 128 位)15。
boolbool1-布尔值类型,存储 true 或 false,至少 1 位16。

long long (C++ 11)

C++ 11 引入标准的新类型。
无特殊声明时,声明的整数会被默认解释为int

long long x = 65536;   // 实际是将int型赋给long long
long long x = 65536LL; 

numeric_limits()获取当前数据类型的最值

C++中提供了获取数据类型最值的库函数 numeric_limits,通过类模板std::numeric_limits 提供了一种标准化方法来查询算术类型的各种属性。使用示例如下:

#include <iostream>
#include <limits>int main() {std::cout << "char is " << (std::is_signed<char>::value ? "signed" : "unsigned") << " on this system." << std::endl;std::cout << "Minimum value of char: " << static_cast<int>(std::numeric_limits<char>::min()) << std::endl;std::cout << "Maximum value of char: " << static_cast<int>(std::numeric_limits<char>::max()) << std::endl;return 0;
}
//char is signed on this system.
//Minimum value of char: -128
//Maximum value of char: 127

warning C4309: “=”: 截断常量值

整型溢出问题

char buffer = 0xFF;

执行如上代码时编译器会报warning C4309: “=”: 截断常量值
因为声明的0xFF会被解释为int型的255,而赋值给char类型最大值为127

新字符类型char16_t和char32_t

UTF编码相关

char16_t utf16c = u'好';
char32_t utf32c = U'好';char16_t utf16c[] = u'你好你好';
char32_t utf32c[] = U'你好你好';

Windows编程常用字符类型wchar_t

typedef const wchar_t* LPCWSTR;
BOOL PathFileExistsW(LPCWSTR pszPath);

char8_t (C++ 20)

char str[] = u8"test";	// C++17编译通过;C++20编译失败,需要char8_t
char c = u8'c';char8_t c8a[] = "test";	//C++20编译失败,需要char
char8_t c8 = 'c';
http://www.lryc.cn/news/2403914.html

相关文章:

  • 【C++进阶篇】C++11新特性(下篇)
  • 全生命周期的智慧城市管理
  • echarts柱状图实现动态展示时报错
  • Redis故障转移
  • STM32学习笔记:定时器(TIM)原理与应用(详解篇)
  • JAVA获取ES连接并查询所有数据
  • 408第一季 - 数据结构 - 线性表
  • 第23讲、Odoo18 邮件系统整体架构
  • 【QT面试题】(三)
  • DeepSeek09-open-webui使用
  • HarmonyOS:Counter计数器组件
  • 数据类型 -- 字符
  • WordZero:让Markdown与Word文档自由转换的Golang利器
  • sqlsugar WhereIF条件的大于等于和等于查出来的坑
  • Pandas 技术解析:从数据结构到应用场景的深度探索
  • 数据库系统概论(十七)超详细讲解数据库规范化与五大范式(从函数依赖到多值依赖,再到五大范式,附带例题,表格,知识图谱对比带你一步步掌握)
  • [c#]判定当前软件是否用管理员权限打开
  • 并发编程实战(生产者消费者模型)
  • 分布式微服务系统架构第144集:FastAPI全栈开发教育系统
  • el-tabs 切换时数据不更新的问题
  • git小乌龟不显示图标状态解决方案
  • 获取 OpenAI API Key
  • 【Android基础回顾】五:AMS(Activity Manager Service)
  • pycharm中提示C++ compiler not found -- please install a compiler
  • 类型别名与类型自动推导
  • 一站式直播工具:助力内容创作者高效开启直播新时代
  • 【学习笔记】Lamba表达式[匿名函数]
  • 学习笔记(26):线性代数-张量的降维求和,简单示例
  • 以智能管理为基础,楼宇自控打造建筑碳中和新路径
  • 81 实战一:给root目录扩容