归档
善良比聪明更重要
07
11
Lambda 表达式的捕获列表 Lambda 表达式的捕获列表
捕获值列表,是 Lambda 表达式的函数体中直接使用这些值的含义,捕获值列表能捕获的值是所有在此作用域可以访问的值,包括这个作用域里面的临时变量、类的可访问成员、全局变量。捕获值的方式分两种,一种是按值捕获,一种是按引用捕获。顾名思义,按
2019-07-11
06
27
std::ref 的作用 std::ref 的作用
C++ 本身有引用 &,为什么 C++11 又引入了 std::ref?主要是考虑函数式编程如 std::bind 在使用时,是对参数直接拷贝,而不是引用。如下例子: void f(int& n1, int& n2,
2019-06-27
13
C++ const 与 mutable C++ const 与 mutable
const:常量,不变的 mutable:易变的。从意思上理解,可见 const 和 mutable 是一对反义词,它们都是 C++的关键字。const 成员函数不能修改调用它的对象。类的成员函数可以被声明为 const,这将使得函数的隐式
2019-06-13
05
30
C++ friend 友元 C++ friend 友元
原则上,类的私有和受保护成员不能从声明它们的同一类外部访问。但是,此规则不适用于友元friends。以 friend关键字修饰的函数或类称为友元函数或友元类。 友元函数友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数
2019-05-30
16
C++ 拷贝构造与赋值函数 C++ 拷贝构造与赋值函数
在进行 C++类编写的过程之中,通常会涉及到类的拷贝构造函数与类的赋值函数。初涉类编写时,这两类函数的用法一直是挺让人困惑的内容。这篇文章我们会详细来梳理拷贝构造函数与赋值函数的区别。 调用了哪个函数上述两种函数的使用和 C++之中类的定义
2019-05-16
02
new 与 malloc 的区别 new 与 malloc 的区别
申请的内存所在位置new 操作符从自由存储区上为对象动态分配内存空间,而 malloc 函数从堆上动态分配内存。自由存储区是 C++ 基于 new 操作符的一个抽象概念,凡是通过 new 操作符进行内存申请,该内存即为自由存储区。而堆是操作
2019-05-02
04
18
04
C++ 命令行参数 C++ 命令行参数
前言我们在 Linux 用到的命令常常支持很多参数,那么如何写一个程序,也像 Linux 命令一样支持很多参数呢?有什么优雅的处理方法? 命令行参数在介绍如何处理命令行参数之前,简单介绍一下命令行参数,已经了解的朋友可以跳过此小节。我们用一
2019-04-04
03
21
sizeof 的 9 个特殊规则 sizeof 的 9 个特殊规则
摘要sizeof 的作用非常简单:求对象或者类型的大小。然而 sizeof 又非常复杂,它涉及到很多特殊情况,总结出了 sizeof 的 9 个特性:(1)sizeof 不能求得 void 类型的长度;(2)sizeof 能求得 void
2019-03-21
07
sizeof 与 strlen 的区别 sizeof 与 strlen 的区别
对于初学者来说,sizeof,strlen,数组,字符串整在一起是痛苦的,本文看看它们在一起能挖什么坑。 例子在说明这些问题之前,先看一段代码,看看你是否都理解了。注:以下代码结果为编译为 64 位程序后运行结果。 void testArr
2019-03-07
02
21
++i 与 i++ 的区别 ++i 与 i++ 的区别
我们经常使用 for 循环来遍历东西,循环变量可以前自增也可以后自增,发现对遍历结果没啥影响,但是该如何选择呢?我们应该尽量使用前自增运算符而不是后自增运算符,即用 ++Iter 代替 Iter++。前缀和后缀形式之间的区别是众所周知的。我
2019-02-21
07
C++ 二维数组 C++ 二维数组
二维数组我们知道 C 语言没有真正意义上的二维数组。二维数组的实现,只是简单地通过“线性扩展”的方式进行。 int b[4][5]; 就是定义 4 个元素,每个元素都是一个包含 5 个整型变量的一维数组。它在内存中依然是以线性的形式存储。
2019-02-07
2 / 3