- 博客(8)
- 资源 (10)
- 收藏
- 关注
原创 C++中的原子操作和原子类型
原子操作是个不可分割的操作。 在系统的所有线程中, 不可能观察到原子操作完成了一半的情况:它要么就是做了, 要么就是没做, 只有这两种可能。 如果从对象读取值得加载操作是原子的, 而且对这个对象的所有修改操作也是原子的, 那么加载得到的值要么是对象的初始值, 要么是某次修改操作存入的值。 另一方面, 非原子操作可能会被另一个线程观察到只完成一半。 如果这个操作是一个存储操作, 那么其...
2018-04-17 17:02:36 3558
原创 重载运算符(基本概念)
重载的运算符是具有特殊名字的函数:它们的名字由关键字 operator 和其后面要定义的运算符号共同组成。 同其他函数一样, 重载的运算符函数也包含返回类型、参数列表以及函数体。 通常情况下, 不该重载逗号, 取地址, 逻辑与和 逻辑或运算符。 下面的准则有助于我们在将运算符定义为成员函数还是普通的非成员函数做出抉择。 赋值(=), 下标([]),调用(())和成员访问箭...
2018-04-17 08:34:52 2882
原创 析构函数
析构函数执行与构造函数相反的操作:构造函数初始化对象的非static数据成员。 析构函数可能还要做其他的一些工作, 析构函数释放对象使用的资源, 并销毁对象的非static数据成员。 析构函数是类的一个成员函数, 名字由波浪号接类名构成。他没有返回值,也不接受参数。析构函数不接受参数, 因此不能被重载。对于一个给定类, 只能有一个析构函数。析构函数由一个函数体和析构部分组成。 在一个...
2018-04-16 19:02:34 263
原创 拷贝、赋值与销毁
拷贝构造函数: 如果构造函数的第一个参数是自身类型的引用, 且任何额外参数都有默认值, 则此构造函数就是拷贝构造函数。拷贝构造函数的参数如果不是自身类型的引用, 则调用永远也不会成功--为了拷贝构造函数, 我们必须拷贝它的实参, 但为了拷贝实参, 我们又需要调用拷贝构造函数, 如此无限循环。 合成拷贝构造函数: 如果我们没有为一个类定义拷贝构造函数(syn...
2018-04-16 17:28:26 137
原创 C++ pair用法
template<class T1, class T2>struct pair; pair是一个结构体, 内部有两个成员, first、second。 T1 :type of first member T2: type of second member 因此,当一个函数值返回两个数据的时候,可以使用pair。其...
2018-04-13 12:59:58 328
原创 显示转换
---------------------------------------------------------------------------------------------------------------------------------static_cast 任何具有明确定义的类型转换, 只要不包含底层const, 都可以使用static_cast。 int i, ...
2018-04-12 19:39:24 256
原创 算法导论 摊还分析
摊还分析是求一个操作序列所执行的所有操作的平均时间,与平均复杂度不同的是,它不涉及输入概率,它可以保证最坏情况下每个操作的平均性能。 摊还分析(amortized)有三种常用的分析技术,聚合分析(aggregated analysis),核算法(accounting method), 势能法(potential method)。 利用聚合分析,对于所有n,执行一个n操作序列的最...
2018-04-11 20:37:46 826
原创 C++静态成员
静态成员指的是在类声明成员时,前面加上static关键字,这样的成员就叫做静态成员(包括数据成员和成员函数)。当声明类的静态成员时,无论创建多少个类的成员函数,静态成员只有一个副本。静态成员的生命周期是从程序开始到程序结束,因此,静态成员的定义必须在类的外部,其形式为类名::(范围解析运算符)。静态成员的初始化可以在类内,也可以在类的外部,当不存在初始化语句的时候,在创建第一个类的对象的时...
2018-04-11 12:24:02 532
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人