C++11 带来了众多新特性,极大地提升了 C++ 语言的功能、安全性和开发效率,主要特性如下:核心语言特性自动类型推导(auto):借助auto关键字,编译器可依据变量初始化表达式自动推导其类型。比如auto num = 10; ,编译器能自动识别num为int类型。这在处理复杂模板类型时,能极大简化代码书写,减少冗长的类型声明。decltype 类型推导 …
nullptr
一、基础必备核心1. 指针与引用(遥控器原理)指针:存储地址的变量(像电视遥控器)int tv = 100;电视机int* remote = &tv; 遥控器指向电视*remote = 200; 用遥控器调整电视引用:变量的别名(给电视贴标签)int& label = tv; 标签贴到电视上label = 300; 通过标签修改电视2. 内存管理(仓库管理员 …
很多进入 C++ 领域的朋友都是从 C 转行而来,会天然地将 C 的语法用在 C++ 代码中。随着 C++ 的现代化进程在加快,前段时间有些朋友和我提起,现在的 C++ 语法他她已经看不懂了。所以,有必要让初进 C++ 的朋友对 C++ 语言的现代化版本有更全面的认识,藉此机会,我们就一起聊聊现代化的起点版本 C++ 11 引入了哪些比较有用的新特性?1. …
Strongly-typed enums 强类型枚举传统的C++枚举类型存在一些缺陷:它们会将枚举常量暴露在外层作用域中(这可能导致名字冲突,如果同一个作用域中存在两个不同的枚举类型,但是具有相同的枚举常量就会冲突),而且它们会被隐式转换为整形,无法拥有特定的用户定义类型。在C++11中通过引入了一个称为强类型枚举的新类型,修正了这种情况。强类型枚举由关键字 …
C 语言作为一门历史悠久且广泛使用的编程语言,其发展过程中经历了多次标准化,以确保语言的统一性、可移植性和稳定性。这些标准定义了 C 语言的语法、语义以及标准库的功能。以下是 C 语言的主要标准版本,按时间顺序排列: * K&R C (非官方标准) * 来源: 1978 年布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis …
线性表的链式存储 - 单向链表之前给大家介绍了线性表顺序存储,虽然它的查找很快O(1)的时间复杂度,但是一旦被创建出来,它的长度是固定的,即为MAXSIZE的长度,如果我们添加元素后超过这个值,不得不另外重新开辟一个比MAXSIZE更大长度的数组去存储它,更要命的是将之前的数组完全拷贝到这个新的数组中,而不得不额外花费O(n)的时间复杂度。链式存储可以很好地 …
在 C++ 中,有四种显式的强制类型转换操作符,它们分别用于不同的场景,提供更安全、更明确的类型转换。以下是这四种强制类型转换的详细介绍:1.static_cast用途:用于基本数据类型之间的转换,以及具有继承关系的指针或引用之间的转换。特点:在编译时进行类型检查,不具备运行时的安全检查。示例:cpp 基本数据类型转换int i = 10;double d …
在C++11新标准中,语言本身和标准库都增加了很多新内容,本文只涉及了一些皮毛。不过我相信这些新特性当中有一些,应该成为所有C++开发者的常规装备。你也许看到过许多类似介绍各种C++11特性的文章。下面是我总结的,C++开发者都需要学习和使用的C++11新特性。auto在C++11之前,auto关键字用来指定存储期。在新标准中,它的功能变为类型推断。auto …
在 C++ 中,NULL 是一个宏,通常被定义为 0 或者 (void*)0。这种定义方式可能会导致一些问题,因为在某些情况下,编译器可能无法确定 NULL 到底是应该解释为整数 0 还是指针类型的 NULL。例如,考虑下面的代码:#include <iostream>void foo(int i) {std::cout << …
某些时候,我们需要将指针赋值为空指针,以防止野指针。有人喜欢使用NULL作为空指针常量使用,例如:int* p = NULL;。也有人直接使用0值作为空指针常量,例如:int* p = 0;。前者可能觉得:NULL作为空指针常量,名字很形象,可读性较强。后者可能觉得:NULL并不是CC++语言的关键字,而是一个在标准库头文件<stddef.h>中 …