C++11
文章平均质量分 84
C++11新特性
crossoverpptx
I am nobody.
展开
-
C++11:右值引用
右值引用是一种新的 C++ 语法,基于右值引用引申出了 2 种 C++ 编程技巧,分别为移动语义和完美转发。本文主要介绍什么是右值引用以及它的基本用法。原创 2023-07-05 12:46:47 · 102 阅读 · 0 评论 -
C++11:使用using定义别名
本文介绍 C++11 中使用 using 定义别名的用法。原创 2023-07-04 18:22:53 · 972 阅读 · 0 评论 -
C++11:decltype类型推导
decltype 是 C++ 11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导。moredecltype 是 “declare type” 的缩写,译为“声明类型”。既然已经有了 auto 关键字,为什么还需要 decltype 关键字呢?这是因为 auto 并不适用于所有的自动类型推导场景,在某些特殊情况下 auto 用起来非常不方便,甚至压根无法使用,所以 decltype 关键字也被引入到 C++11 中。原创 2023-07-03 13:57:20 · 96 阅读 · 0 评论 -
C++11:auto类型推导
auto 的一个典型应用场景是用来定义 STL 的迭代器。我们在使用 STL 容器的时候,需要使用迭代器来遍历容器里面的元素;不同容器的迭代器有不同的类型,在定义迭代器时必须指明。return 0;可以看出来,定义迭代器 i 的时候,类型书写比较冗长,容易出错。然而有了 auto 类型推导,我们大可不必这样,只写一个 auto 即可。原创 2023-07-02 15:38:44 · 302 阅读 · 0 评论 -
C++11:tuple元组
C++11 标准新引入了一种类模板,命名为 tuple(元组)。tuple 最大的特点是:实例化的对象可以存储任意数量、任意类型的数据。tuple 的应用场景很广泛,例如当需要存储多个不同类型的元素时,可以使用 tuple;当函数需要返回多个数据时,可以将这些数据存储在 tuple 中,函数只需返回一个 tuple 对象即可。原创 2022-12-26 11:14:03 · 61 阅读 · 0 评论 -
C++11:move函数将左值强制转换为右值
通过学习C++11移动构造函数我们知道,C++11 标准中借助右值引用可以为指定类添加移动构造函数,这样当使用该类的右值对象(可以理解为临时对象)初始化同类对象时,编译器会优先选择移动构造函数。需要注意,移动构造函数的调用时机是:用同类的右值对象初始化新对象。那么,用当前类的左值对象(有名称,能获取其存储地址的实例对象)初始化同类对象时,是否就无法调用移动构造函数了呢?当然不是,C++11 标准中已经给出了解决方案,即调用 move() 函数。原创 2023-01-04 18:32:26 · 136 阅读 · 0 评论 -
C++11:引用限定符
C++中有左值和右值的概念。其实,左值和右值的区分也同样适用于类对象,本文中将左值的类对象称为左值对象,将右值的类对象称为右值对象。more。原创 2023-01-01 09:32:22 · 250 阅读 · 0 评论 -
C++11:移动构造函数
在 C++ 98/03 标准中,如果想用其它对象初始化一个同类的新对象,只能借助类中的拷贝构造函数。拷贝构造函数的实现原理很简单,就是为新对象复制一份和其它对象一模一样的数据。需要注意的是,当类中拥有指针类型的成员变量时,拷贝构造函数中需要以深拷贝(而非浅拷贝)的方式复制该指针成员。原创 2023-01-03 20:03:57 · 264 阅读 · 0 评论 -
C++11:lambda匿名函数
lambda 源自希腊字母表中第 11 位的 λ,在计算机科学领域,它则被用来表示一种匿名函数。所谓匿名函数,简单地理解就是没有名称的函数,又常被称为 lambda 函数或者 lambda 表达式。原创 2022-11-28 16:50:18 · 2345 阅读 · 0 评论 -
C++11:列表初始化
为了统一初始化方式,并且让初始化行为具有确定的效果,C++11 中提出了列表初始化(List-initialization)的概念。原创 2022-12-27 10:36:02 · 103 阅读 · 0 评论 -
C++11:constexpr关键字
constexpr 是 C++ 11 标准新引入的关键字,在学习其具体用法和功能之前,我们需要先搞清楚 C++ 常量表达式的含义。所谓常量表达式,指的就是由多个(≥1)常量组成的表达式。换句话说,如果表达式中的成员都是常量,那么该表达式就是一个常量表达式。这也意味着,常量表达式一旦确定,其值将无法修改。原创 2022-12-30 11:10:55 · 398 阅读 · 0 评论 -
C++11:longlong超长整型和nullptr初始化空指针
本文介绍 C++11 标准中新添加的 long long 超长整型和 nullptr 初始化空指针。more。原创 2022-12-31 09:34:02 · 819 阅读 · 0 评论 -
C++11:智能指针
在C++中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针(smart pointer)。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动地销毁动态分配的对象,防止内存泄露。随着C++的发展,有三个解决方案,一个方案对应着一种智能指针。其实,C++一共提供了四种智能指针:auto_ptr, unique_ptr,shared_ptr,weak_ptr。原创 2022-09-27 12:21:35 · 466 阅读 · 0 评论 -
C++11:for循环(基于范围的循环)
在C++ 98/03标准中,如果要用 for 循环语句遍历一个数组或者容器,只能套用如下结构:```c++for(表达式 1; 表达式 2; 表达式 3){ //循环体}```原创 2022-12-29 20:21:48 · 627 阅读 · 0 评论 -
C++11:非受限联合体(union)
在 C/C++ 中,联合体(Union)是一种构造数据类型。在一个联合体内,我们可以定义多个不同类型的成员,这些成员将会共享同一块内存空间。老版本的 C++ 为了和C语言保持兼容,对联合体的数据成员的类型进行了很大程度的限制,这些限制在今天看来并没有必要,因此 C++11 取消了这些限制。C++11 标准规定,任何非引用类型都可以成为联合体的数据成员,这种联合体也被称为非受限联合体。原创 2022-12-28 10:40:23 · 134 阅读 · 0 评论 -
C++11:支持函数模板的默认模板参数
C++11 支持为函数模板中的参数设置默认值,在实际使用过程中,我们可以选择使用默认值,也可以尝试由编译器自行推导得到,还可以亲自指定各个模板参数的类型。原创 2022-12-25 19:28:27 · 157 阅读 · 0 评论 -
C++11:返回值类型后置(跟踪返回值类型)
返回值类型后置语法,是为了解决函数返回值类型依赖于参数而导致难以确定返回值类型的问题。有了这种语法以后,对返回值类型的推导就可以用清晰的方式(直接通过参数做运算)描述出来,而不需要像 C++98/03 那样使用晦涩难懂的写法。原创 2022-12-24 11:09:19 · 259 阅读 · 0 评论