【C++11保姆级教程】空指针(nullptr),long long类型,char16_t和char32_t类型

简介: 【C++11保姆级教程】空指针(nullptr),long long类型,char16_t和char32_t类型

前言


在C++11标准中引入了许多新特性和改进,其中包括空指针(nullptr)、long long类型、char16_t和char32_t类型。这些功能为C++提供了更强大和更灵活的功能。


一、空指针(nullptr)


1.1概念解释

在早期版本的C++中,我们使用NULL宏表示空指针,但它实际上是一个整数常量。C++11引入了nullptr关键字,用于表示空指针。它是一个特殊的关键字,可以被赋值给指针类型,用于明确指示一个指针不指向任何有效的内存地址。


1.2形象比喻

想象一下,你有一个信封,你需要将它发送给某人。在旧版本的信封上,你可能会写上"空",但这实际上不太明确。在C++11中,nullptr就像一个专门的标签,写上了"无收件人",更加明确地表明这个信封并没有指向任何人。


1.3示例代码

int* ptr = nullptr;  // 声明一个空指针
if (ptr == nullptr) {
    std::cout << "ptr是空指针" << std::endl;
}


1.4空指针nullptr的优势

兼容性:如果你的代码需要与旧版C++兼容,nullptr可能无法使用,因为旧版C++不支持它。


二、long long类型


2.1概念解释

C++11引入了long long类型,它具有扩展的整数范围,提供更大的整数值表示能力。它至少具有64位的存储空间,使得我们能够处理更大的整数值。


2.2形象比喻

想象你需要计算全球的人口数量,使用int类型可能不足以表示如此庞大的数字。长整型(long long)就像一个更大的数字范围,可以容纳更多人口数量,让你处理大规模的数据更加容易。


2.3示例代码

使用后缀LL进行赋值/初始化

long long population = 7800000000LL;  // 全球人口
std::cout << "全球人口:" << population << std::endl;


2.4优势

1、更大的范围:long long类型可以表示更大的整数值,解决了处理大型数据的问题。

2、更精确的计算:对于大型计算或需要高精度的场景,long long类型提供了更高的精确度。


2.5劣势

1、占用空间:由于long long类型占用更多的存储空间,对于存储要求严格的系统,可能会增加内存消耗。


三、char16_t和char32_t类型


3.1概念解释

C++11引入了char16_t和char32_t类型,用于表示Unicode字符编码。在早期版本的C++中,字符类型只有char,它通常使用单字节来表示字符。然而,Unicode字符集需要更多的存储空间来表示更多的字符。


3.2形象比喻

假设你有一本书,其中包含来自不同国家的文字。在旧版本的C++中,这本书的每个字符都只能占据一个页面,但有些字母可能需要多个页面才能完整地展示。char16_t和char32_t类型就像给这本书提供了更大的页面,让每个字符都能完整地展现。


3.3示例代码

char16_t 使用小u

char32_t使用大u

char16_t u16Char = u'π';     // 使用char16_t表示Unicode字符π
char32_t u32Char = U'😊';    // 使用char32_t表示Unicode字符😊
std::cout << u16Char << std::endl;
std::cout << u32Char << std::endl;

d748673b5fa04e9bb4dcc0a9541dd630.png

输出:

8257f0ab91394ef7a3c0115fb3c4d030.png

3.4优势

1、更广泛的字符表示能力:通过使用char16_t和char32_t类型,我们可以处理更多字符集,包括Unicode的扩展字符。

2、提高国际化支持:在开发多语言应用程序时,char16_t和char32_t类型能够更好地支持国际化和本地化需求。


3.5劣势

1、内存消耗:由于char16_t和char32_t类型占用更多的存储空间,对于存储要求严格的系统,可能会增加内存消耗。


总结


在本教程中,我们介绍了C++11的空指针(nullptr),long long类型,char16_t和char32_t类型。空指针提供了更安全和更直观的方法来表示空指针,避免了悬空指针的风险。long long类型扩展了整数范围,使得我们能够处理更大的整数值。char16_t和char32_t类型提供了更广泛的字符表示能力,支持Unicode字符集的处理。

请记住,每个新特性都有其优势和劣势。空指针能够提供更安全和直观的表示,但兼容性可能会受到影响;long long类型提供了更大的整数范围,但占用更多的存储空间;char16_t和char32_t类型支持更广泛的字符表示能力,但也会增加内存消耗。

通过掌握这些概念,你将能够更好地在C++中处理空指针、大整数和Unicode字符。希望这个教程对你有所帮助!

相关文章
|
6月前
|
缓存 安全 编译器
C++面试周刊(3):面试不慌,这样回答指针与引用,青铜秒变王者
《C++面试冲刺周刊》第三期聚焦指针与引用的区别,从青铜到王者级别面试回答解析,助你21天系统备战,直击高频考点,提升实战能力,轻松应对大厂C++面试。
550 132
C++面试周刊(3):面试不慌,这样回答指针与引用,青铜秒变王者
|
6月前
|
存储 C++
C++语言中指针变量int和取值操作ptr详细说明。
总结起来,在 C++ 中正确理解和运用 int 类型地址及其相关取值、设定等操纵至关重要且基础性强:定义 int 类型 pointer 需加星号;初始化 pointer 需配合 & 取址;读写 pointer 执向之处需配合 * 解引用操纵进行。
551 12
|
11月前
|
存储 SQL 关系型数据库
【YashanDB知识库】MySQL迁移至崖山char类型数据自动补空格问题
**简介**:在MySQL迁移到崖山环境时,若字段类型为char(2),而应用存储的数据仅为&#39;0&#39;或&#39;1&#39;,查询时崖山会自动补空格。原因是mysql的sql_mode可能启用了PAD_CHAR_TO_FULL_LENGTH模式,导致保留CHAR类型尾随空格。解决方法是与应用确认数据需求,可将崖山环境中的char类型改为varchar类型以规避补空格问题,适用于所有版本。
|
12月前
|
存储 SQL 关系型数据库
【YashanDB 知识库】MySQL 迁移至崖山 char 类型数据自动补空格问题
问题分类】功能使用 【关键字】char,char(1) 【问题描述】MySQL 迁移至崖山环境,字段类型源端和目标端都为 char(2),但应用存储的数据为'0'、'1',此时崖山查询该表字段时会自动补充空格 【问题原因分析】mysql 有 sql_mode 控制,检查是否启用了 PAD_CHAR_TO_FULL_LENGTH SQL 模式。如果启用了这个模式,MySQL 才会保留 CHAR 类型字段的尾随空格,默认没有启动。 #查看sql_mode mysql> SHOW VARIABLES LIKE 'sql_mode'; 【解决/规避方法】与应用确认存储的数据,正确定义数据
|
存储 程序员 C++
深入解析C++中的函数指针与`typedef`的妙用
本文深入解析了C++中的函数指针及其与`typedef`的结合使用。通过图示和代码示例,详细介绍了函数指针的基本概念、声明和使用方法,并展示了如何利用`typedef`简化复杂的函数指针声明,提升代码的可读性和可维护性。
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
703 4
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
324 2
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
228 0
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
1393 13
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
634 4