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

现代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';

相关文章:

  • WaytoAGI东京大会开启AI全球化新对话:技术无国界,合作促创新
  • PCB设计教程【大师篇】——STM32开发板电源设计(电压基准、滤波电容)
  • PG 分区表的缺陷
  • 自制操作系统(五、重写引导部分和C语言的使用)
  • c++学习-this指针
  • 【仿生机器人】仿生机器人智能架构:从感知到个性的完整设计
  • 《Progressive Transformers for End-to-End Sign Language Production》复现报告
  • 【LangchainAgent】Agent基本构建与使用
  • 第七章 监听一致性协议 A Primer on Memory Consistency and Cache Coherence - 2nd Edition
  • 【C/C++】std::vector成员函数清单
  • 零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
  • 字符串字典序最大后缀问题详解
  • 迷宫问题(一)(C++版本)
  • 《高等数学》(同济大学·第7版)第二章第四节“隐函数及由参数方程所确定的函数的导数“
  • linux进程管理之从内存/cpu角度使用setrlimirt/rlimit
  • 【题解-洛谷】P1706 全排列问题
  • 露亦如电 · 时之沙 | 让遗憾在灰烬里随风而去
  • natapp 内网穿透失败
  • windows使用脚本杀死python进程
  • c++ —— 内存管理
  • 昆明市城乡建设局网站/学网络营销好就业吗
  • wordpress模板文件夹/太原网站制作优化seo
  • 上海网站建设招聘/最新网络营销方式有哪些
  • 如何制作网站网页/网络推广方式有哪些
  • 企业网站建设一般多少钱/引擎搜索入口
  • 网站优化软件推荐/网络免费推广平台