
c/c++
文章平均质量分 78
honky_tonk_man
这个作者很懒,什么都没留下…
展开
-
C++ copy assignment operator is implicitly deleted
首先给出copy assignment operator隐式删除的规则的定义TTTTTTTT翻译一下如果下面任何一个条件为真,则触发copy assignment operator的隐式删除类T有用户定义的移动构造类T有用户定义的移动赋值操作如果下面任何一个条件为真,则将默认copy assignment operato定义为deleteclass T有一个数据成员是非static且为const的non-class typeclass T有一个数据成员是非静态的引用类型。原创 2023-08-24 15:15:51 · 1215 阅读 · 0 评论 -
C++:lower class obj访问upper class obj
首先本篇文章讨论集成,而是一个class 包含另一个class obj,比如下面代码,base class里面包含了derive class的obj那么问题来了,如果class A包含2个class obj,分别是B和C,而C又包含一个class obj D,此时D obj想调用B obj的某个成员函数怎么办?如下图fill:#333;color:#333;color:#333;fill:none;原创 2023-07-18 16:00:11 · 386 阅读 · 0 评论 -
C++ const reference
指针变量和引用的区别,因为指针变量本身是一个变量,所以改变其值不会改变其指向内存区域的值,而引用可以看成"绑定"当一个引用指向一个内存区域(“绑定”)后,改变这个引用的值会顺带改变引用指向的对象的值,因此const和引用的组合要比const和指针的组合约束要大,导致const和引用的组合就只有const reference。原创 2023-05-28 17:41:29 · 1176 阅读 · 0 评论 -
C+中std::list如何存储不同类型的变量
首先我们有以下简单的C++代码然后我们给出的的memory layout我们可以看到class Y继承了class X所以class的Y的对象中也有class X的虚指针(X::_vptr),并且class Y重载了class X虚函数的部分,所以class Y中虚指针(X::_vptr)指向的是class Y重载之后的函数(Y::~Y()),那么class X的对象呢?class X的对象中的虚指针(X::_vptr)其实也指向了Y::~Y(),因为被派生类class Y重载。原创 2023-05-24 11:30:35 · 853 阅读 · 0 评论 -
C++: lambda vs std::function
lambda其实就是一个匿名函数,其语法格式如下params就是我们匿名函数的传参,body就是匿名函数的具体语句,但是capture就比较特别,他是用于捕获上一级变量在我们lambda中使用,比如最简单的一个no capture(不使用lambda之外的变量)lambda如下假设外部有一个变量var我们想在lambda中调用可以这样写此时我们将上一级的变量(包含var)给一份给lambda中用当然我们也可以不copy 变量var,而是reference变量var如下。原创 2023-05-04 14:53:30 · 691 阅读 · 0 评论 -
C++智能指针
也会随着消失,当智能指针小时其指向的内存区域也就是struct的内容也会消失,避免了我们忘记release class中的某些成员,假如这些成员占用内存很大,且是放于heap中,并且忘记在析构函数中remalloc或者delete,那么就会内存泄漏,如果用。当我们多个智能指针指向一块内存的时候,他们可以同时操作这块区域,和普通指针没什么两样,但是当我们的所有智能指针(指向同一块内存)超出生命周期(超过范围scope)后,那么这块内存会自动的被销毁,防止出现内存泄漏。)被销毁后,并没有触发析构函数,而是在。原创 2023-05-04 17:37:59 · 998 阅读 · 0 评论 -
c++ atomic
首先锁的一些操作都是操作系统提供,比如win,linux,但是atomic是我们处理器提供的,锁机制其实是将被lock住的线程挂起,空出cpu资源给其他的线程,但是这有明显的inter pross的线程上下文切换(被锁住的线程在不断地尝试直到成功强到锁(也叫做busy wait))我们使用锁的时候还要考虑死锁等情况发生(当然c++中有。在C++标准中并没有说明他是lock-free的,有的平台他是lock-free,有的平台他是用mutex实现,所以C++提供了一个method去验证你的这个平台上。原创 2023-04-03 22:03:36 · 807 阅读 · 1 评论 -
C++ virtual destructor
virtual destructor原创 2022-11-25 15:14:53 · 577 阅读 · 0 评论 -
C++ 虚拟继承(virtual Inheritance)
虚拟继承原创 2022-11-23 10:46:24 · 611 阅读 · 0 评论 -
C++ constexpr && consteval && constinit
constexpr&&consteval&&constinit原创 2022-11-19 19:44:12 · 560 阅读 · 0 评论 -
c++ operator overloading
c++原创 2022-11-13 18:04:22 · 482 阅读 · 0 评论 -
统计C++程序运行时间
统计C++运行时间原创 2022-09-16 10:36:45 · 899 阅读 · 0 评论 -
C++面对对象设计模式
设计模式原创 2022-09-04 18:45:18 · 447 阅读 · 1 评论 -
linux C/C++ socket编程
socket原创 2022-09-04 11:45:22 · 4352 阅读 · 0 评论 -
gdb and coredump && valgrind分析
gdb原创 2022-08-12 17:15:39 · 3211 阅读 · 0 评论 -
使用char存int类型数字深究
使用char存int类型数字深究原创 2022-07-13 14:58:05 · 1775 阅读 · 0 评论 -
使用容器环境跑GDB的一些坑
GDB原创 2022-07-12 16:36:01 · 815 阅读 · 0 评论 -
C/C++ 位操作
C++打印数字二进制原创 2022-06-30 12:31:28 · 3729 阅读 · 0 评论 -
C/C++ extern和static的使用
Cpp原创 2022-06-24 19:17:10 · 1108 阅读 · 1 评论 -
C/C++ 多线程编程
C/C++多线程编程原创 2022-06-21 21:33:00 · 1192 阅读 · 0 评论 -
关于使用unordered_map.count()作为判断条件的一些坑
今天在写bustub的bufferpool代码时候有一个非常奇怪的bug让我百思不得其解,我有一个unordered_map叫做page_table,用于映射bufferpool中的pageid和bufferpool中真实位子也就是下标frameid的我在unpin后自然而然的删除了这个键值对page_table.erase(0),在接下来的判断中FetchPg的判断中page_table.count(0)应该返回0为假,然后我从磁盘中拿相应的page到内存中,奇怪的是我erase后page_table.c原创 2022-05-15 17:55:16 · 1123 阅读 · 0 评论 -
C++ 11 =delete
前言在写代码的时候发现一个bug,编译器报错,报/usr/include/c++/9/ext/new_allocator.h:145:20: error: use of deleted function最后发现了原因,是因为我们隐式的调用了copy构造函数,但是,copy构造函数被我们显示的删除了(=delete),由此我们探讨一下C++ 11的=delete特性代码先看一个正常的copy构造函数#include <iostream>#include <list>原创 2022-05-13 12:24:45 · 1458 阅读 · 0 评论 -
C++ 派生类赋值给基类指针
基类和派生类的关系基类和派生类不是2个独立的类型,派生类是一个基类的类型,它们2个不是分开的,当我们创建一个派生类的时候,派生类中的数据member应该如下BaseClass : [Base Data]DerivedClass : [Base Data][Derived Data]派生类的数据类型附加于基类之后当我们给一个基类类型指向派生类的时候,这个基类指针访问的是派生类继承基类的那部分数据,就算我们在派生类中重新更改继承而来的基类类型,基类指针访问的还是原来的数值,如下#include &原创 2022-05-09 16:01:12 · 808 阅读 · 0 评论 -
c++ rethink virtual
前言关于虚函数,原理都明白,分为纯虚函数和虚函数,其中纯虚函数需要在虚函数后面加上=0,而虚函数不用,虚函数和纯虚函数的区别是虚函数是基类创建class,并且在里面创建一个虚函数,子类继承虚函数并且使用,而纯虚函数除了继承还必须要覆盖他,如下#include <iostream>using namespace std;class Base{public: Base() = default; virtual void Print(){cout << "non原创 2022-05-08 19:09:47 · 208 阅读 · 0 评论 -
拷贝构造vs移动构造
拷贝构造The copy constructors in C++ work with the l-value references and copy semantics(copy semantics means copying the actual data of the object to another object rather than making another object to point the already existing object in the heap). While m原创 2022-04-28 17:39:52 · 2277 阅读 · 0 评论 -
std的使用
前言STL全称Standard Template Library,就是标准模板库,意思就是一群非常牛批的人实现的各种算法,数据结构的库被当成标准模板给你直接使用,他位于std这个namespace中 ,我们这里还要介绍一个东西叫做迭代器(iterator),迭代器是一个数据类型,其可以表示容器内所有元素的值,也支持做自增等操作,相当于容器和操作容器算法之间的中介1,这个容器也是非常抽象的std数据结构对象,假如我们要迭代每一个数据结构就需要实现不同的数据类型进行迭代,但是有了迭代器就不用了List这里原创 2022-04-23 17:13:52 · 3921 阅读 · 0 评论 -
构造函数vs析构函数添加default关键字
我们都知道c++中析构函数和构造函数时干嘛的,此时我们对其加上c++11的新特性default看一下,如下1class A{ A() = default;//构造 ~A() = default;//析构};class A{ A(){};};对于加default和加{}在非虚函数下完全不一样,我们先看下面的一个例子,这个例子在C++11标准里面完全合法,在C++的编译器眼里这个class是trivial-typeclass A{ public: int原创 2022-04-23 13:58:13 · 5663 阅读 · 0 评论 -
lock-free vs wait-free
文章目录为什么需要lock-free从底层去看lock-freeatomic指令的层级atomic操作wait-free为什么需要lock-free什么是lock-free?lock-free通常用于结构体中,此结构体经常被多个线程访问,假如处于blocking中,一个线程访问这个结构体那么其他的线程访问结构体都会被blocking住(ie mutex),假如正在访问这个结构体的线程(已经获得锁)因为某一些原因crash了,那么其他待访问这个结构的线程就被永远block住…这个时候我们就需要lock-f原创 2022-04-19 12:03:28 · 948 阅读 · 0 评论 -
C语言:可变参数函数的使用(va_list,va_start,va_arg和va_end)
文章目录1.0 简介1.1 函数参数存储方式1.2 va_list,va_start,va_arg和va_end函数简介1.3 实操1.0 简介可变参数函数就是函数的参数有好多个,我们用…省略,我们如果要用到这些函数我们一定会用到va_list,va_start,va_arg和va_end这些函数,我们的printf和scanf的函数也是这样定义的,首先我们看可变参数的函数怎么写的void ...原创 2020-12-28 13:06:22 · 173 阅读 · 0 评论 -
CMU 15-213 CSAPP
文章目录计算机位计算机位[root@zhr ~]# gdbGNU gdb (GDB) Fedora 8.1-11.fc28Copyright (C) 2018 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later &amp;amp;amp;amp;amp;amp;amp;amp;lt;http://gnu.org/licenses/gpl.html&amp;amp;amp;a原创 2020-12-28 13:07:47 · 422 阅读 · 0 评论 -
c++ primer笔记
文章目录第一部分 c++基础1.0 变量和基本类型1.1 算术类型 (arithmetic type)1.2 空类型(void type)第一部分 c++基础1.0 变量和基本类型1.1 算术类型 (arithmetic type)算术类型的尺寸在不同的电脑上有所差别,所以c++标准就列出每个类型最小的值一个char因该存放机器基本字符集中任意字符对应的数字值,也就是说一个char...原创 2020-12-28 13:08:12 · 772 阅读 · 0 评论 -
基本排序算法
文章目录冒泡排序法选择排序法插入排序法冒泡排序法冒泡排序法是最简单的一种排序方法他的基本思想就是有一行数字让他们左右相互比较(a&lt;b)谁小或者谁大就往后面拍,如果这个if不成立就不变(这个是看你是从大往小排还是从小往大排),一直排到第n-1&lt;n 个数然后再来几次(次数由你由n个数定,你就排n-1次,因为你排序最差的情况就是最大的数再最后而你又要以最大的排排前面,这个数最多移动四位)...原创 2020-12-28 13:04:34 · 102 阅读 · 0 评论 -
c笔记.md
文章目录5章(运算符和表达式)运算符的优先级(从高到低)6章(while for do while)while 循环for循环逗号运算符do while数组(array)第7章,c语言控制语句:分支和跳转if语句if else语句getchar()和putchar()函数ctype.h头文件else if多重选择逻辑运算符条件运算符 ? :循环辅助: continue和breakcontinue...原创 2020-12-28 13:08:55 · 907 阅读 · 0 评论