随笔分类 - C++ / C++11
记录C++11新特性
摘要:文章参考: C++ 教程 | 爱编程的大丙 (subingwen.cn) C++11的原子量与内存序浅析 - 兔晓侠 - 博客园 (cnblogs.com) 从C++11起,C++为用户提供一套新的多线程类。线程相关操作头文件:thread #include <thread> 一. std::thr
阅读全文
摘要:1. 隐式类型转换 在C++11前,对于类的使用,存在隐式类型转化的情况,实质上是构造函数的隐式调用。下面是一个例子: EG: 代码: #include <iostream> using namespace std; class Test { public: int x; int y; Test(i
阅读全文
摘要:文章参考: 爱编程的大丙 (subingwen.cn) 1. 概述 弱引用智能指针std::weak_ptr是共享智能指针std::shared_ptr的助手,它不管理shared_ptr内部的原始指针,也没有重载操作符*、->,因此不共享指针,不能操作资源,所以它的构造和析构都不会影响引用计数。其
阅读全文
摘要:文章参考: 爱编程的大丙 (subingwen.cn) 1. 初始化: 特点: 相较于共享智能指针,独占智能指针(unique_ptr)的关键在于:同一时刻,只能有一个智能指针指向同一块内存。因此独占智能指针不允许使用拷贝构造函数和拷贝赋值函数。 初始化: 通过构造函数初始化: unique_ptr
阅读全文
摘要:文章参考: 爱编程的大丙 (subingwen.cn) 所谓智能指针,其实就是C++11封装的类,里面存有一个正常指针,智能指针会通过这个正常指针,来监视指针指向的内存,当没有智能指针指向该内存时,该内存就被释放。其核心在于引用计数,每一个智能指针指向内存A,智能指针内部的引用计数就加一。每析构一次
阅读全文
摘要:文章参考: 爱编程的大丙 (subingwen.cn) 1. 联合体 联合体又名共用体,使用方式和struct相似,其特点在于: 联合体中所有的成员变量,引用的都是内存中的相同位置。 如果联合的不同成员有不同的长度,取最长的那个变量作为联合的长度。 如果将结构体作为联合的成员变量,那么联合的大小取决
阅读全文
摘要:文章参考 爱编程的大丙 (subingwen.cn) 1. 枚举 1.1 概述 在C/C++中的枚举来自于C,处于设计上简单的目的,枚举往往对应到整型数值。: // 匿名枚举 enum {Male, Female}; // 0, 1 // 有名枚举 enum Color {Red, Yellow=2
阅读全文
摘要:文章参考: 爱编程的大丙 (subingwen.cn) 1. 语法改进 在C++98中,如果想要声明类B是类A的友元类,需要class关键字,而在C++11中,可以省略关键字class,还可以使用别名。 EG: C++98中: class B; class A{ friend class B; //
阅读全文
摘要:文章参考: 爱编程的大丙 (subingwen.cn) 1. 类与默认函数 在C++中声明自定义的类,编译器会默认帮程序员生成一些未定义的成员函数,这些函数被称为默认函数,一共有六个: 无参构造函数:创建类对象 拷贝构造函数:拷贝类对象 移动构造函数:拷贝类对象。 拷贝赋值函数:类对象赋值。 移动赋
阅读全文
摘要:文章参考: 爱编程的大丙 (subingwen.cn) 1. POD概述 1.1 意义 POD:是plain old data的缩写,即普通的旧数据。POD通常用于说明一个类型的属性,尤其是用户自定义类型的属性,具体来说它是指没有使用面向思想来设计的类/结构体。 POD含义为: Plain:表示是一
阅读全文
摘要:文章参考: 爱编程的大丙 (subingwen.cn) 1. 可调用对象 一组执行任务的语句都可以视作一个函数、一个可调用对象。C++中提供了可调用对象的概念,其应用相当广泛,例如在处理一些回调函数、触发函数时就会用到。 可调用对象有如下几种类型: 函数指针: int add(int a, int
阅读全文
摘要:文章参考: 爱编程的大丙 (subingwen.cn) 1. C++98 在C++11之前,using有两种用法: 用来声明要使用的命名空间: using namesapce std; 当子类重载父类的同名成员函数时,通过using继承父类的同名函数。 #include <iostream> usi
阅读全文
摘要:文章参考: 爱编程的大丙 (subingwen.cn) C++中有多种数据类型,如:变量、数组、对象。这些数据类型各自的初始化方式,并没有统一的方法。为了简化初始化过程,C++11提出了一种统一的初始化方法,即列表初始化。 1. 统一的初始化 1.1 C++98 在C++98中,有两种情况可以使用列
阅读全文
摘要:文章参考: 爱编程的大丙 (subingwen.cn) 1. move 作用:主要作用有两点: 实现用左值来初始化右值引用。 进行对象间的资源转移。(避免使用拷贝,从而提高效率) 特点: 可以将左值转化为右值。 该函数和移动构造函数一样,都有移动语义,将对象的状态或者所有权从一个对象转移到另一个对象
阅读全文
摘要:文章参考:爱编程的大丙 (subingwen.cn) 1. 委托构造函数 目的: 允许同一个类中的一个构造构造函数调用其余构造函数,通过链式构造函数的形式,简化构造操作(类似于套娃)。 EG: #include <iostream> using namespace std; class Base{
阅读全文
摘要:文章参考:爱编程的大丙 (subingwen.cn) 1. 概述 Lambda表达式是现代编程语言的一个特点,他有如下优点: 声明式的编程风格:就地匿名定义目标函数或函数对象,不需要额外写一个命名函数或函数对象。 简洁:避免了代码膨胀和功能分散,然开发更加高效。 灵活:在需要的时间和地点实现功能闭包
阅读全文
摘要:文章参考:爱编程的大丙 (subingwen.cn) C使用NULL表示空,其定义为: #define NULL ((void *)0) 在C++中同样定义了NULL,C和C++虽然都是强类型语言,但是C++对语言的要求更高,不允许(void *)类型进行隐式的类型转化,因此如果沿袭C中NULL的定
阅读全文
摘要:文章参考:爱编程的大丙 (subingwen.cn) 1. const关键字 const关键字的判断: 限制为常量。只有在声明时使用字面量初始化的才是常量,可以进入符号表。 void func(const int a){ // 只读变量 ... } int x = 0; const int a =
阅读全文
摘要:文章参考:爱编程的大丙 (subingwen.cn) 1. for循环新语法 在C++98中,对于不同的容器和数组,遍历方式不尽相同,也不够简洁。而在C++11中,基于范围的for循环可以更加方便的遍历容器和数组。 语法: for(declaration: expression){ ... } de
阅读全文
摘要:文章参考:爱编程的大丙 (subingwen.cn) 1. auto 在C++11之前,auto和static相对应用于表示变量是自动存储的,但是非static局部变量默认都是自动存储的,auto因此显得额外鸡肋。C++11中对auto进行了扩展,使他能够自动推导变量的实际类型。 1.1 推导规则
阅读全文