自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

felicity_one的博客

嵌入式学习过程中遇到的种种基情与心情

  • 博客(662)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 2.2.2. Variable Declarations and Definitions 6 静态类型详解

定义:在编译时检查类型的语言特点:变量的类型在声明时确定,之后不能更改对比:动态类型语言(如Python、JavaScript)在运行时检查类型静态类型定义:C++是静态类型语言,类型在编译时检查类型约束:对象的类型限制了它可以执行的操作编译时检查:编译器检查操作是否与类型兼容优势:早期错误检测、代码可靠性、性能优化、大型项目支持限制:代码灵活性降低、学习曲线较陡、代码可能冗长现代特性:auto类型推导、decltype、类型别名、模板类型最佳实践。

2026-03-29 09:45:20 326

原创 2.2.2. Variable Declarations and Definitions 5 声明与定义分离的重要性详解

作用:告诉编译器变量的存在和类型特点:不分配存储空间,可在多个文件中重复示例作用:为变量分配存储空间,可能初始化特点:只能在一个文件中出现一次示例int x = 5;模块化:将代码分成多个文件,便于管理和维护避免重复定义:如果在多个文件中定义同一个变量,会导致链接错误编译效率:修改一个文件时,只需要重新编译该文件,而不是整个项目代码复用:通过头文件声明,方便其他文件使用错误:在多个文件中定义同一个变量int x = 5;// 定义int x = 10;// 错误:重复定义解决方案。

2026-03-29 09:44:11 308

原创 2.2.2. Variable Declarations and Definitions 4 函数内extern初始化器错误详解

/ 错误理解:认为extern是定义// 这只是声明,不是定义x = 5;// 正确:赋值,不是初始化// 声明// 定义// 使用global_varreturn 0;核心规则:在函数内部为extern变量提供初始化器是错误的原因:存储期冲突、作用域冲突、初始化时机冲突正确用法:在函数外部声明和定义extern变量,在函数内部仅声明和使用最佳实践:使用头文件声明,源文件定义,函数内仅使用编译器处理:会产生编译错误,阻止这种错误用法。

2026-03-29 09:43:12 464

原创 2.2.2. Variable Declarations and Definitions 3 声明与定义详解

作用:创建关联的实体功能:指定类型和名称,分配存储空间,可能提供初始值特点:定义也是一种声明要获得一个不是定义的声明,需要添加extern// 声明但不定义iint j;// 声明并定义j特性声明定义存储空间分配否是初始化器可选(但提供后变为定义)可选出现次数可多次只能一次extern关键字可使用不使用(除特殊情况)// math.h (声明)// 函数声明// math.cpp (定义)} // 函数定义声明:告诉编译器名字的存在和类型定义。

2026-03-29 09:41:38 373

原创 2.2.2. Variable Declarations and Definitions 2 未初始化变量风险详解

本文详细解释《C++ Primer》中关于未初始化变量风险的内容,重点说明未初始化变量的不确定值、未定义行为的后果以及调试困难。未初始化变量是指在定义时没有提供初始值的变量。对于内置类型,这意味着变量包含内存中恰好存在的任意值。int x;// 未初始化// 未定义行为return 0;int x;// 未初始化// 可能导致除以零崩溃function();return 0;// 推荐int x = 0;// 不推荐int x;x = 0;// 延迟初始化不确定值。

2026-03-29 09:40:17 442

原创 2.2.2. Variable Declarations and Definitions 1 分离编译详解

本文详细解释《C++ Primer》中关于分离编译(separate compilation)的内容,重点说明C++如何支持将程序分成多个文件独立编译,以及如何在这些文件之间共享代码。声明(Declaration):告诉编译器某个名称的存在及其类型定义(Definition):为名称分配内存空间// 声明// 声明全局变量// 声明函数// 定义// 定义全局变量void function() { // 定义函数// 函数体问题:链接时找不到函数或变量的定义解决方案。

2026-03-29 09:38:24 407

原创 2.2.1. Variable Definitions - Default Initialization 3 未初始化变量详解

本文详细解释《C++ Primer》中关于未初始化变量的内容,重点说明函数体内内置类型未初始化对象的未定义值,以及类类型对象的默认初始化行为。未定义行为输出任意值崩溃表现出不可预测的行为在不同编译器或平台上表现不同int x;// 未初始化// 未定义行为:可能输出任何值// 未定义行为:可能导致程序崩溃int y = x;// 读取未初始化变量// 未定义行为:可能导致意外结果x++;// 递增未初始化变量return 0;内置类型函数体内未初始化:未定义值。

2026-03-28 09:57:01 87

原创 2.2.1. Variable Definitions - Default Initialization 2 类类型初始化控制详解

本文详细解释《C++ Primer》中关于类类型初始化的内容,重点说明每个类如何控制其对象的初始化行为,以及不同类的默认初始化规则。public:// 默认构造函数:提供默认值// 带参构造函数private:int age;// 默认初始化// 使用默认构造函数// 显式初始化// 使用带参构造函数return 0;类控制初始化:每个类通过构造函数控制其对象的初始化行为默认构造函数:允许无初始化器的对象定义默认值:类决定默认初始化对象的值必须显式初始化的类。

2026-03-28 09:55:43 97

原创 2.2.1. Variable Definitions - Default Initialization 1 默认初始化详解

本文详细解释《C++ Primer》中关于默认初始化的内容,重点说明默认初始化的规则、内置类型的默认值以及未初始化变量的风险。默认初始化是指在定义变量时没有提供初始化器的情况下,系统为变量提供的初始化行为。// 全局变量:默认初始化为零// 局部变量:未初始化// 0// 未定义行为return 0;// 全局变量:初始化为零// 0// 0// 0int// 0return 0;// 局部变量:未初始化// 访问未初始化变量:未定义行为。

2026-03-28 09:54:08 103

原创 2.2.1. Variable Definitions - List Initialization 3 初始化形式区别的重要性详解

本文详细解释《C++ Primer》中关于初始化形式区别的重要性,特别是为什么看似微不足道的区别实际上可能在不经意间导致问题,以及这些初始化形式在后续章节中的详细讨论。// 变量定义和初始化的详细讨论int x = 10;// 复制初始化int y{20};// 列表初始化// 初始化器的形式// 复制列表初始化int w(40);// 直接初始化return 0;看似微不足道:初始化形式的区别在简单情况下看似不重要实际重要性:在复杂场景中,这些区别可能导致意外的数据丢失无意初始化。

2026-03-28 09:51:34 210

原创 2.2.1. Variable Definitions - List Initialization 2 列表初始化防止窄化转换详解

本文详细解释《C++ Primer》中关于列表初始化防止窄化转换的重要特性,重点说明为什么列表初始化会拒绝可能导致信息丢失的初始化操作。窄化转换从浮点类型转换到整数类型(丢失小数部分)从较大的整数类型转换到较小的整数类型(可能溢出)从较大的浮点类型转换到较小的浮点类型(可能丢失精度)窄化转换:可能导致数据丢失的类型转换列表初始化:拒绝窄化转换,提供类型安全传统初始化:允许窄化转换,但会产生警告显式转换:当需要窄化时,使用明确意图。

2026-03-28 09:49:46 311

原创 2.2.1. Variable Definitions - List Initialization 1 初始化形式详解

本文详细解释《C++ Primer》中关于C++初始化形式的内容,重点介绍四种不同的初始化方式以及列表初始化(花括号初始化)的特性和优势。四种初始化方式int x = 0;int x{0};int x(0);列表初始化的优势防止窄化转换统一初始化语法支持空初始化适用于各种类型使用建议优先使用列表初始化(花括号形式)注意特殊构造函数的歧义利用列表初始化提高代码可读性。

2026-03-28 09:46:56 304

原创 2.2.1. Variable Definitions - Initializers 3 初始化与赋值的根本区别详解

本文详细解释《C++ Primer》中关于初始化与赋值的根本区别,强调初始化发生在变量创建时,而赋值则是替换对象的当前值。操作时机行为底层机制初始化变量创建时给新创建的对象一个初始值调用构造函数赋值变量已存在时销毁当前值,替换为新值调用赋值操作符初始化:变量创建时设置初始值赋值:销毁对象当前值并替换为新值根本区别:时机和行为完全不同。

2026-03-28 09:44:06 225

原创 2.2.1. Variable Definitions - Initializers 2 初始化与赋值区别详解

本文详细解释《C++ Primer》中关于初始化复杂性的重要概念,特别是初始化与赋值之间的关键区别。这是一个C++中容易被混淆但至关重要的概念。初始化:对象创建时设置初始值赋值:改变已有对象的值语法混淆符号既用于初始化也用于赋值重要性:对于复杂类型和特殊场景至关重要。

2026-03-28 09:41:00 553

原创 2.2.1. Variable Definitions - Initializers 1 对象初始化详解

本文详细解释《C++ Primer》中关于对象初始化的关键概念,包括初始化时机、复杂表达式初始化、以及多变量定义时的初始化顺序规则。// 多变量定义:名称立即可见// 输出: 10// 输出: 15// 输出: 30// 更复杂的例子return 0;初始化时机:对象在创建时立即获得指定值复杂表达式:初始化值可以是任意复杂的表达式名称可见性:多变量定义时,每个名称立即可见顺序初始化:可以使用前面定义的变量初始化后面的变量。

2026-03-28 09:39:08 184

原创 2.2.1. Variable Definitions 3 “对象“概念的不同理解方式详解

在C++编程中,“对象”(object)这一术语存在多种不同的理解和使用方式。不同的程序员和文献对"对象"的定义有所差异,这反映了C++语言的灵活性和复杂性。定义:对象是具有类型的内存区域特点不考虑是内置类型还是类类型不考虑是否有名称不考虑是否可读写示例int x = 10;// x是一个对象(命名对象)// 动态分配的对象(无名对象)// 类类型的对象public:int data;// 这是对象(类类型)// 这不是对象,是基本类型变量根据C++标准,对象是存储区域。

2026-03-27 18:50:22 298

原创 2.2.1. Variable Definitions 2 string类型定义和初始化详解

是C++标准库中的一个重要类型,用于表示可变长度的字符序列。它是处理文本数据的主要工具,提供了丰富的字符串操作功能。#include <string> // 必须包含string头文件// 使用std命名空间// 或者使用完全限定名可变长度:自动调整大小,无需手动管理内存丰富的初始化方式:支持多种构造方法安全性:自动防止缓冲区溢出功能性:提供丰富的字符串操作函数易用性:支持直观的操作符重载必须包含<string>头文件使用或通过using声明支持从字符串字面量直接初始化。

2026-03-27 18:47:55 557

原创 2.2.1. Variable Definitions 1 简单变量定义的理解

根据C++ Primer Plus,一个简单的变量定义由类型说明符组成,后跟一个或多个用逗号分隔的变量名列表,并以分号结束。列表中的每个名称都具有由类型说明符定义的类型。定义可以(可选地)为其定义的一个或多个名称提供初始值。原文类型说明符 变量名1, 变量名2, ..., 变量名N;类型说明符 变量名1 = 初始值1, 变量名2 = 初始值2, ...;// 基本类型 int float double char bool // 复合类型 std :: string// 单个变量定义// 多个变量定义。

2026-03-27 18:43:07 359

原创 2.2 Variables 1 变量的概念理解

/ 声明,不分配内存// 参数声明// 定义并初始化// 定义,未初始化(值不确定)变量是命名存储空间:为程序提供可操作的命名内存区域类型的重要性:类型决定内存大小、值范围和可用操作变量与对象的互换性:在C++中这两个术语可以互换使用理解变量的概念是学习C++编程的基础,它涉及到:内存管理类型系统作用域和生命周期初始化方式命名约定通过合理使用变量,我们可以编写出清晰、高效、可维护的C++代码。变量不仅是存储数据的容器,更是构建复杂程序的基础构建块。

2026-03-27 18:38:43 368

原创 如何使用cmake来构建visual studio工程

在 Visual Studio 中,选择 "Build" -> "Build Solution" 构建项目。(例如 e:\Books\C++\project\line4 纯C++\first\fmt-master)(例如 e:\Books\C++\project\line4 纯C++\first\fmt-master\。选择 "Visual Studio" 作为生成器(根据你的 Visual Studio 版本选择)安装 Visual Studio(推荐 2019 或更高版本)

2026-03-27 15:37:25 429

原创 windows安装cmake步骤

在命令窗口中输入cmake --version查看版本,能正确显示所安装的版本号则表明安装成功。

2026-03-27 13:09:33 1071

原创 详细分析UTF-8/UTF-16/UTF-32的关联与区别

在编程中,字符串的“字节数”、“码元数”(如JS的.length)和“字符数”(用户感知的)可能完全不同,这是由编码的变长特性导致的,处理时需要小心。UTF-8适用于存储与交换,UTF-16适用于特定系统内存模型,UTF-32适用于对计算简单性有极致要求的内部处理。UTF-8、UTF-16和UTF-32是Unicode字符集的三种主要编码方案。:UTF-8、UTF-16、UTF-32是同一目标下的三种工程折中方案。​ 理解它们的关联与区别,是正确处理全球文本信息的基础。

2026-03-10 01:43:29 509

原创 Unicode码转UTF-32编码的规则

这种简单性使其成为需要频繁随机访问字符的高级文本处理算法(如复杂脚本渲染、排版)的理想内部表示格式,但绝不适用于通用存储和传输。例如,ASCII 字符“A”在 UTF-8 中仅需 1 字节,但在 UTF-32 中固定占用 4 字节,其中 3 个字节是零。直接将码点值存储为 32 位(4 字节)的整数,无需任何转换或特殊处理。:无需解析复杂的位模式,直接读写 32 位整数即可。:最高有效字节在前(00 00 00 41)。:最低有效字节在前(41 00 00 00)。,编码规则仅为“照抄码点值”。

2026-03-10 01:32:56 182

原创 UTF-32的系统介绍

一些语言或库在内存中处理复杂文本(如字形渲染、双向文本排版)时,会先将字符串转换为 UTF-32,以便进行恒定时间的字符索引和操作,处理完成后再转换回其他格式输出。:对于以 ASCII 或 BMP 字符为主的文本(如英文、中文),空间占用是 UTF-8 的 4 倍,是 UTF-16 的 2 倍。需要频繁随机访问字符串中任意位置字符的算法,使用 UTF-32 可以避免 UTF-8/16 解码的 overhead。这是它与 UTF-8(变长,1-4字节)和 UTF-16(变长,2或4字节)

2026-03-10 01:31:17 282

原创 Unicode码转UTF-16编码的规则

在某些旧版Windows程序(如记事本)中,将UTF-8文件“另存为”时,可能会自动添加BOM。:在UTF-16或UTF-32中,同一个16位或32位的码元,在存储为字节序列时有两种顺序。因此,您引用的描述非常准确:在UTF-16文件开头加入 FE FF或 FF FE的BOM,是正确解码文件的。这到底是大端序的“A”,还是小端序的“Ѐ”(一个西里尔字母,其小端序编码恰好是 00 41)。:UTF-8的字节顺序是固定的,不存在字节序问题。假设字符“A”的UTF-16编码是 0x0041(十六进制)。

2026-03-10 01:16:39 924

原创 UTF-16编码系统介绍

当您深度开发Windows原生应用、Java/.NET程序或处理JavaScript引擎内部时,需遵循其UTF-16的模型。例如,“中”(U+4E2D)的UTF-16编码就是 4E 2D(两个字节)。的本质,警惕代理对和字节序带来的复杂性。:存储常见非拉丁文字(如中文、日文、韩文)时,比UTF-8更节省空间(UTF-8需3字节,UTF-16为2字节)。:与底层操作系统(尤其是Windows)和运行时(JVM、CLR)的API无缝兼容。FF FE:表示小端序(UTF-16LE,Windows常用)。

2026-03-10 00:45:11 404

原创 UTF-8编码系统介绍

UTF-8 的多个字节有严格的先后顺序,这个顺序是编码规则的一部分,与 CPU 的字节序无关。虽然 UTF-8 理论上不需要 BOM,但微软的一些旧工具(如记事本)会在 UTF-8 文件开头添加一个三字节的 BOM(EF BB BF)。对于英文、数字和常用符号,UTF-8 仅需 1 字节,与 ASCII 相同,远优于 UTF-16(2字节)和 UTF-32(4字节)。UTF-8 的编码规则基于一个精妙的模式,通过字节的高位比特来指示该字节是单字节字符的首字节,还是多字节字符的后续字节。

2026-03-09 23:00:48 510

原创 Unicode码的系统介绍

为解决“同一个字符可能有多种编码序列”的问题(您之前问的“中”字对应多个编码可能与此相关),定义了如NFC、NFD等规范化形式,确保文本比较和处理的唯一性。同一个字符“A”,在UTF-8中占1字节,在UTF-16中占2字节,在UTF-32中占4字节。:填入再接下来的6位 **011111**→ 10**011111**= 0x9F。:填入接下来的6位 **011000**→ 10**011000**= 0x98。:填入最低的6位 **001010**→ 10**001010**= 0x8A。

2026-03-09 22:52:22 500

原创 ASCII编码系统介绍

它诞生于1960年代,由美国国家标准学会(ANSI)的前身制定,旨在解决不同计算机系统间文本数据交换的兼容性问题。:无希腊字母(α, β, γ)、西里尔字母(А, Б, В)、希伯来字母。:控制字符(0-31)、可打印字符(32-126)、特殊字符(127)(0x0A):换行,光标移至下一行(Unix/Linux行结束符)数字(0-9)、大写字母(A-Z)、小写字母(a-z)连续排列。(0x0D):回车,光标返回行首(Mac OS行结束符):0-127(十进制),0x00-0x7F(十六进制)

2026-03-09 18:15:33 767

原创 C++中宽字符和字符的区别是什么?

实现定义,通常是 typedef unsigned short wchar_t;或 typedef int wchar_t;的核心区别在于它们能表示的字符集范围和内存占用不同。选择哪种类型应基于应用程序的需求、目标平台和使用的第三方库来决定。(0-127) 或扩展ASCII。​ (Windows) 或。ASCII 或 UTF-8。Unicode 字符。

2026-03-09 16:55:26 593

原创 C++中的literal和C中的constant差异

在 C++ 和 C 语言中,"literal"(字面值)和 "constant"(常量)的概念有显著差异,主要体现在术语定义、类型系统和语言特性上。

2025-10-07 14:30:22 937

原创 2.14.1 Kinds of literals

这定义了 C++ 中 7 种字面值类型:​​整数字面值​420xFF075123ULL可以是十进制、八进制(前缀0)或十六进制(前缀0x0X可带后缀指定类型(如ULLL​​字符字面值​'a'u'字'L'β'表示单个字符'\n''\x41'​​浮点数字面值​3.146.02e231.0f包含小数点或指数部分eEfF(float),lL​​字符串字面值​"Hello"u8"UTF-8"表示字符序列(包含隐式终止符'\0'​​布尔字面值​true和false类型为bool​​指针字面值​。

2025-10-07 13:18:07 542

原创 2.1.3. Literals 0

​​为什么区分进制?​​八进制/十六进制字面值能表示无符号类型,而十进制默认为有符号类型(除非后缀指定)。​​类型范围依赖平台​intlong的大小因系统而异(e.g., Windows 中long通常32位,Linux 中可能64位)。使用cstdint(如int32_t)可避免歧义。​​实际建议​​:小值(如计数器)无需后缀,编译器会选int。大值或需无符号时,使用后缀(如UULL)确保类型安全。编译错误时检查字面值是否过大。// 十进制 → int// 八进制 → int(值较小)

2025-10-07 02:02:33 1048

原创 C++中对所有类型所占字节数有规定吗?

​否(编译器自由决定)指针、类类型、枚举。

2025-09-02 00:05:30 1229

原创 5.3.3 Sizeof 1

​(固定为 1)。

2025-09-01 22:03:54 1004

原创 C++中wchar_t的发展历史

时期角色与状态​​C90​​诞生期,为解决多字节编码而生,定义为typedef,细节实现定义。​​C++98​​鼎盛期,成为关键字和基本类型,拥有完整的标准库支持。​​2000s​​分裂期,Windows(16位/UTF-16)和 Unix(32位/UTF-32)实现分裂,可移植性差。​​C++11​​衰落期,被更明确、可移植的char16_t和char32_t取代。​​现代C++​​​​遗留期​​。​​主要价值在于与旧平台API(特别是Windows API)的兼容​​。

2025-08-30 21:15:39 1057

原创 C++ 14标准中,当基本数据类型不带signed 或者unsigned时,默认是signed 还是unsigned?

数据类型默认符号性标准依据​​char​​​​实现定义​​​​​​有符号§3.9.1​​​​无符号§3.9.1​​short​​有符号§3.9.1​​int​​有符号§3.9.1​​long​​有符号§3.9.1​​long long​​有符号§3.9.1✅ ​​C++14 默认符号性规则​•shortintlonglong long→ ​​有符号​​•char→ ​​实现定义​​(编译器决定)⚠️ ​​关键建议​1.重要代码中​​显式声明符号性​​2.

2025-08-30 20:30:58 1040

原创 3.9.1 Fundamental types 2

•​​层级分明​​:5种标准类型形成严格大小层级•​​开放扩展​​:允许编译器添加新类型•​​性能导向​int作为性能最优的默认选择•​​专用优化​​:其他类型解决特定场景需求理解这一体系对编写高效、可移植的C++代码至关重要,特别是在涉及跨平台开发、嵌入式系统或高性能计算时。新代码应优先使用int和固定宽度类型(int32_t等),仅在必要时使用其他类型。

2025-08-30 19:48:28 920

原创 3.9.1 Fundamental types 5

​​核心结论​​:C++11通过此条款在保留wchar_t兼容性的同时,用解决了历史遗留的跨平台字符处理问题。新代码应优先使用后者,仅在对接系统API时使用wchar_t。

2025-08-30 18:38:33 603

原创 C++中wchar_t、char16_t、char32_t三者的区别

以下内容来自腾讯元宝。在C++中,wchar_tchar16_t和char32_t都是用于表示宽字符的数据类型,但它们有不同的特性和用途。

2025-08-28 22:54:35 976

visual C++ 2017从入门到精通

给看我专栏的朋友们参考。 专栏链接:https://blog.youkuaiyun.com/qq_20725221/category_5707019.html 代码仓库:https://gitcode.com/qq_20725221/VisualC2017

2025-04-24

JNI程序员指南与规范

英文版

2024-12-17

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除