C++
xjtu_qyq
个人的bug与patch持续更新 https://bugs.launchpad.net/~qianyuqiao
展开
-
设计模式的学习
https://blog.csdn.net/u010993820/article/details/80968933面向对象六大原则(设计模式的六大原则):开闭原则:开放扩展 关闭修改里氏替换原则: 所有基类出现的地方可以替换为子类依赖倒置原则: 依赖于抽象,不要依赖于具体接口隔离原则: 一个类用多个专门的接口最少知道原则: 从被依赖者的角度:只暴露应该暴露的方法或属性,即编写相...原创 2020-04-16 01:03:19 · 93 阅读 · 0 评论 -
c++ override final关键字
final:1.一个类或结构体不希望被继承class Base final{};class Derive : public Base{};报错信息如下:1.cpp:34:7: error: cannot derive from ‘final’ base ‘Base’ in derived type ‘Derive’ class Derive : public Base2.一个虚函数不希望被重写class Base{public: virtual v原创 2020-08-13 14:13:04 · 251 阅读 · 0 评论 -
c++11的新特性
https://blog.csdn.net/raiven2008/article/details/82114736原创 2020-04-24 14:29:33 · 131 阅读 · 0 评论 -
float的存储
float为浮点型,32位机器中占4字节共32bit,下标0~31.31 位:符号位,正数为0,负数为1。30 位:方向位。小数点左移位1,右移为0。23~29:共7位,指数位。=指数-1。0~22:共23位,尾数。转换方法:1 整数部分转成二进制。整数不停的除2,直到商位0。逆序取出每次的余数。2 小数部分转成二进制。小数部分不停的乘2,直到结果的小数部分位0.正序取...原创 2020-04-25 10:36:16 · 151 阅读 · 0 评论 -
右值引用 移动构造函数 移动语义
假设有下面的代码vector<string> vec;for (int i = 0; i < 1000; i++){ vec.push_back(string("123")); // 调用构造函数和拷贝构造函数}原创 2020-04-14 01:20:21 · 193 阅读 · 0 评论 -
变量的定义 声明和初始化和static
1.声明:定义性声明:int a;引用性声明:extern int a;2.定义int a;3.初始化a = 10;一般的情况下,我们把建立空间的声明称之为定义.而把不需要建立存储空间的声明称之为声明。4.讲一讲static1.static修饰局部变量:变量分配在静态数据区2.static修饰全局函数和全局变量作用域在本文件内部3.修...原创 2020-04-15 11:32:37 · 273 阅读 · 0 评论 -
栈上对象的内存自动释放
当栈上的对象生命周期结束时,会自动的调用对象的析构函数,并释放内存。如果内存中有成员对象,继续调用成员对象的析构函数。class CC{public: CC() {} ~CC() { cout << "~CC" << endl; }};class C{private: CC c;public: C() : c() {} ~C() { co...原创 2020-04-14 22:18:02 · 1568 阅读 · 0 评论 -
c++内存对齐的规则
内存对齐规则:“对齐系数”:#pragma pack(n)“对齐单位”,也叫有效对齐值min(#pragma pack(n), 最大长度的类型)结构体的总大小为 有效对齐值 的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。class C{public: short a; long long c; };// 有效对齐值:8class C{...原创 2020-04-13 12:18:26 · 440 阅读 · 0 评论 -
STL list源码解析
1.list的底层实现template<class T>struct __list_node { typedef __list_node<T>* node_pointer; node_pointer prev; node_pointer next; T data;}底层是双向链表2.迭代器的实现template &l...原创 2020-04-07 01:08:07 · 126 阅读 · 0 评论 -
unordered_map的使用特性
map,.unordered_map, hash_map的比较https://blog.csdn.net/u014209688/article/details/953665941.unordered_map的存储结构hashtable是可能存在冲突的(多个key通过计算映射到同一个位置),在同一个位置的元素会按顺序链在后面。把这个位置称为一个bucket2.桶子个数的增长规律...原创 2020-04-05 00:04:07 · 356 阅读 · 0 评论 -
三种单例模式
1.多线程+互斥锁实现(返回指针)#include <pthread.h>#include <iostream>using namespace std;class S1{private: // 所有成员必须是私有成员 static S1* p; static pthread_mutex_t lock; S1() {}; S1(...原创 2020-04-02 12:59:59 · 102 阅读 · 0 评论 -
个人的关于c++运算符重载的总结
1.重载的运算符必须是成员函数吗?不必。重载的运算符不必是成员函数,但必须至少有一个操作数是用户定义的类型。一般来说,非成员函数应是友元函数2.哪些运算符不能被重载?sizeof.*:: (域运算符)?:(条件运算符)typeiddynamic_caststatic_castconst_castreinterpret_cast...原创 2020-03-31 23:04:07 · 156 阅读 · 0 评论 -
c++成员函数可以将this传递给普通函数
#include <iostream>using namespace std;class C; // 必须先申明Cvoid print(C* c); // 必须在C的定义之前声明printclass C{public: int a; C(int x) : a(x) {}; void call() { print(this); }};void print(C* ...原创 2020-03-29 14:05:47 · 486 阅读 · 0 评论 -
写一个不能被继承的类(友元的不可继承性)
class A{public: friend T;private: A() {} ~A() {}};class B:virtual public A<B>{public: B() {} ~B() {}};class C :public B{public: C() {} // 报错,A<T>::A(T = B)不可访问 ~C() {...原创 2020-03-28 23:27:57 · 225 阅读 · 0 评论 -
char* p = "123",字符串在内存中的哪个位置?
源码:#include <stdio.h>const char* p0 = "0";void show();void show(){ const char* p3 = "0"; printf("p3: %p\n", (int*)p3);}int main(){ char s[] = "1"; const char * p1 = "1"...原创 2020-03-16 13:22:02 · 814 阅读 · 0 评论 -
从汇编角度来看动态绑定的概念,以及虚函数在多态中的的作用
#include "iostream"using namespace std;class A // 4+4 = 8 {public: int a; virtual void p0() {} virtual void p() { cout << "A" << endl; }};class B : public A {public: void ...原创 2020-03-06 17:29:06 · 192 阅读 · 0 评论 -
虚继承的内存布局
下面这个函数的输出结果是什么?#include<iostream>using namespace std;class A // 4+4 = 8 {public: int a; virtual void p() {}};class B :virtual public A // 8 + 4 + 4 = 16{public: int b; virt...原创 2020-03-05 23:01:00 · 116 阅读 · 0 评论