自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (1)
  • 收藏
  • 关注

原创 现代C++教程之新特性static_assert和delegating&Inheriting constructors 04

静态断言(static_assert)允许在编译时对表达式进行静态检查,并在不满足条件时发出编译错误 ,委托构造函数(delegating constructors)允许一个构造函数调用同一个类的其他构造函数,以简化代码和避免重复。

2024-03-16 15:52:32 442

原创 现代C++教程之新特性nullptr和enum class 03

nullptr是C++11引入的关键字,用于表示空指针。

2024-03-16 14:34:51 899

原创 现代C++教程之新特性auto&decltype 02

auto和decltype是C++关键字,auto用于自动推导变量类型,decltype用于获取表达式的类型,它们简化了代码书写,提高了代码的可读性和灵活性。

2024-03-15 22:54:24 1030

原创 现代C++教程之新特性前言01

本系列文章将引导你进入现代C++的世界,从基础知识到高级技能,帮助大家充分利用现代C++的优势,写出更高效、更安全、更易维护的代码。它将探索C++的各个方面,从语言特性到标准库,从并发编程到泛型编程,让你在现代C++的道路上踏出坚实而自信的步伐。通过引入C++11、C++14和C++17等新标准,C++不仅拥有了更多强大的工具和特性,还重新定义了我们对于高效、安全和灵活编程的理解。这些特点使得现代C++成为一门更加强大、灵活和高效的编程语言,能够满足复杂软件开发的需求,并提供更好的性能和安全性。

2024-03-15 21:50:01 421

原创 GDB基础知识之寄存器和程序跳转10(完结)

要查看寄存器的值,很简单,可以使用如下命令:查看寄存器的情况。(除了浮点寄存器)查看所有寄存器的情况。(包括浮点寄存器)查看所指定的寄存器的情况。寄存器中放置了程序运行时的数据,比如程序当前运行的指令地址(ip),程序的当前堆栈地址(sp)等等。你同样可以使用 print 命令来访问寄存器的情况,只需要在寄存器名字前加一个$符号就可以了。如:p $eip。

2024-03-14 20:10:15 383

原创 GDB基础知识之历史记录和环境变量09

当用 GDB 的 print 查看程序运行时的数据时,每一个 print 都会被 GDB记录下来。GDB 会以$1, $2, $3 .....这样的方式为每一个 print 命令编上号。于是,可以使用这个编号访问以前的表达式,如$1。这个功能所带来的好处是,如果先前输入了一个比较长的表达式,如果还想查看这个表达式的值,可以使用历史记录来访问,省去了重复输入。

2024-03-14 19:53:37 434

原创 GDB基础知识之设置显示选项08

这个选项主要是设置数组的,如果数组太大了,那么就可以指定一个来指定数据显示的最大长度,当到达这个长度时,GDB就不再往下显示了。在 C++中,如果一个对象指针指向其派生类,如果打开这个选项,GDB会自动按照虚方法调用的规则显示输出,如果关闭这个选项的话,GDB 就不管虚函数表了。设置字符显示,是否按“\nnn”的格式显示,如果打开,则字符串或字符数据按\nnn 显示,如“\065”。这个选项表示,当显示一个 C++对象中的内容是,是否显示其中的静态数据成员。

2024-03-08 17:37:59 330

原创 GDB基础知识之查看内存和自动显示 07

在调试过程中,有时需要查看内存的值和内存中的值,本文将介绍如何使用GDB的命令来实现相关操作。

2024-03-06 19:11:19 746

原创 GDB基础知识之查看运行时数据06

在调试程序时,当程序被停住时,可以使用 print 命令(简写命令为 p),或是同义命令 inspect 来查看当前程序的运行数据。print 命令的格式是:是表达式,是所调试的程序的语言的表达式(GDB 可以调试多种编程语言),是输出的格式,比如,如果要把表达式按 16 进制的格式输出,那么就是/x。

2024-03-05 20:14:57 746

原创 GDB基础知识之查看源码05

GDB调试时,需要结合源码分析问题和堆栈,如何在GDB中查看源码,本文将给出方法。

2024-03-05 13:58:01 951

原创 GDB基础知识之线程停止和查看栈信息04

比如:函数地址,调用函数的地址,被调用函数的地址,目前的函数是由什么样的程序语言写成的、函数参数地址及值、局部变量的地址等等。如果你要查看某一层的信息,你需要在切换当前的栈,一般来说,程序停止时,最顶层的栈就是当前栈,如果你要查看栈下面层的详细信息,首先要做的是切换当前栈。如果你要查看某一层的信息,你需要在切换当前的栈,一般来说,程序停止时,最顶层的栈就是当前栈,如果你要查看栈下面层的详细信息,首先要做的是切换当前栈。如果你程序是多线程的话,你可以定义你的断点是否在所有的线程上,或是在某个特定的线程。

2024-03-02 17:23:37 905 1

原创 GDB基础知识之信号03

信号可以以 SIG 开头或不以 SIG 开头,可以用定义一个要处理信号的范围(如:SIGIO-SIGKILL,表示处理从 SIGIO信号到 SIGKILL 的信号,其中包括 SIGIO,SIGIOT,SIGKILL 三个信号),也可以使用关键字 all 来标明要处理所有的信号。UNIX 定义了许多信号,比如 SIGINT 表示中断字符信号,也就是 Ctrl+C 的信号,SIGBUS表示硬件故障的信号;当被调试的程序收到信号时,GDB 不会停住程序的运行,但会打出消息告诉你收到这种信号。

2024-03-02 17:23:28 212

原创 GDB基础知识之暂停/恢复程序02

当以 gdb 方式启动 gdb 后,gdb 会在 PATH 路径和当前目录中搜索的源文件。如要确认 gdb 是否读到源文件,可使用 l 或 list 命令,看看 gdb 是否能列出源代码。没有搜索到可以在gdb中通过dir命令设置源码搜索路径。

2024-03-02 16:55:38 1310

原创 GDB基础知识之命令面貌01

加载符号表后,GDB 将能够根据符号名称查找对应的函数和变量,并提供符号级别的调试信息,如断点设置、变量监视和栈跟踪等。方法2:先用 gdb 关联上源代码,并进行 gdb,在 gdb 中用 attach,命令来挂接进程的 PID,并用 detach 来取消挂接的进程。方法1:在 UNIX 下用 ps 查看正在运行的程序的 PID(进程 ID),然后用 gdb PID 格式挂接正在运行的程序;如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

2024-03-02 15:17:30 338

原创 理解mysql数据库中的事务与隔离级别

mysql事务、隔离级别、设置隔离级别sql语句

2022-12-09 14:11:05 183

原创 基于apache-tomcat和jenkins的flutter项目自动化部署

windows平台使用tomcat和jenkins部署flutter项目

2022-11-30 10:11:32 1129

原创 C++ 标准库之移交线程归属权解析

前景知识理解线程归属权的移交方法,需要了解std::move(右值转换)和std::forward(完美转发)相关知识,先介绍三个规则。规则1(引用折叠规则):如果间接的创建一个引用的引用,则这些引用就会“折叠”。在所有情况下(除了一个例外),引用折叠成一个普通的左值引用类型。一种特殊情况下,引用会折叠成右值引用,即右值引用的右值引用, T&& &&。即X& &、X& &&、X&& &都折叠成X&am

2022-03-19 20:03:14 583

原创 关于现代C++的学习总结(1)

1 生命周期和编程范式C++生命周期包括:编码、预处理、编译和运行。尽量把BUG消除在前三个阶段。C++语言的五种范式:面向对象、泛型编程、函数式编程、模板元编程和面向过程。面向过程和面向对象是最基本的范式。2 宏定义和条件编译编译是预处理之后的阶段,输入的是经过预处理后的源码,输出是二进制可执行文件,可以用一些关键字或者指令改变编译器的行为。属性(attribute)就是给变量、函数、类等“贴”上一个编译阶段的“标签”,方便编译器识别处理。 C++11 里只定义了两个属性:“noreturn”

2022-02-27 20:01:08 600

原创 cmake基础教程——02 B-hello-cmake

一、项目构成目录.├── CMakeLists.txt├── include│ └── Hello.h└── src├── Hello.cpp└── main.cppinclude//Hello.h#ifndef __HELLO_H__#define __HELLO_H__class Hello{public: void print();};#endifsrc//1.Hello.cpp#include <iostream>#inc

2021-10-24 10:44:37 565

原创 cmake基础教程——01 A-hello-cmake

一、 A-hello-camke项目构成1 C++项目main.cpp#include <iostream>int main(int argc, char *argv[]){ std::cout << "Hello CMake!" << std::endl; return 0;}2 CMakeLists.txt#设置可用于查找CMake版本运行的CMake的最低版本cmake_minimum_required(VERSION 3.5)

2021-10-24 09:50:38 188

翻译 Django学习文档笔记--------模型

Django学习文档笔记--------模型1 字段选项每个字段采用一组特定于字段的参数(记录在 模型字段参考中)。例如, CharField(及其子类)需要一个 max_length参数来指定VARCHAR用于存储数据的数据库字段的大小。这里是最常用的快速总结:1.1 null 字段。如果True,Django 将像NULL在数据库中一样存储空值。默认为False。1.2 blank字段如果True,则允许该字段为空。默认为False。注意: null 与数据库有关,而blank只与验证有关

2021-06-01 15:55:29 95

原创 2021-05-28

django 自定义路由converter详细步骤:1.新建py文件,写一个类(类名随意),然后需要写一个名为regex的属性,其为正则匹配项,同时需要定义to_python和to_url两个函数,注意函数名不可改变。例如:class FourDigitYearConverter: regex = '[0-9]{4}' def to_python(self, value): return int(value) def to_url(self, value):

2021-05-28 17:28:58 65

原创 “对象创建”模式之工厂模式

“对象创建”模式之工厂模式通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象的第一步工作。典型模式:Factory Method、Abstract Factory、Prototype、BuilderFactory Method(工厂模式)模式定义:定义一个创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。动机:在软件系统种,经常面临

2021-01-07 16:02:13 210

原创 Go语言函数作为函数的参数

Go语言的函数作为函数的参数使用go语言函数的表达式func 函数名(形参名1 类型1,形参名2 类型2,…)(返回类型1,返回类型2,…) {函数体}注意:go语言的函数支持多个返回值。函数名大写表示该函数为Public可以被其它package调用,小写为private,不可以被其它包调用。func myFunc(number1 int32,number2 int32) (int32,int32) { return number1+number2 ,number1 -number2

2020-10-09 15:52:51 4958

原创 哈希表、集合、映射、树、堆和图

一、哈希表、映射、集合hash定义哈希表(Hash table),也叫散列表,是根据关键码值(Key value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫作散列函数(Hash Function),存放记录的数组叫作哈希表(或散列表)。工程实践电话号码簿、用户信息表、缓存(LRU Cache)和键值对存储(Redis)等。hash 函数hash 碰撞set、mapmap是key-value对,key不重复;

2020-09-19 20:45:55 415

原创 C++学习中应该注意的知识点之指针

一、指针的两种写法①typename* ptr;②typename *ptr;其中①是C的风格,强调* ptr是一个typename类型的值;②是C++中的写法,更趋向于把 typename *是一个类型,即指向typename的指针。这两种写法对于编译器来说无任何区别。二、指针的危险此处的危险是指,指针解引用前,必须为指针变量赋予确定的、适当的地址。否则会造成bug。如下代码是不允许的,通常这种代码是编译不过去的。int *f;*f=232456;三、new的使用规范不要使用delet

2020-09-12 19:33:35 158

原创 理解递归

递归的含义递归的中文理解就是传递和回归,传递即在每层递归之间要传递东西,回归即要回到初次递归处。记住一点递归的过程就是重复做相同的事情。如何写递归?递归的一个通用模板就是:①递归的终止条件,即递归什么时候结束;②本轮递归需要做的事情,即对数据的处理,包括对下一级递归返回的值和本轮值得处理;③本次递归需要返回给上一级递归的值。实例以力扣得题目讲解,题目描述如下:递归总是从递归结束时依次向上处理。所以其代码为:/**Definition for singly-linked list.stru

2020-09-09 22:31:56 409

原创 新冠肺炎实时软件源码

main 函数#include "widget.h"#include<QFile>#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); QFile qss(":/style/main.qss"); qss.open(QFil...

2020-09-06 20:04:51 746

翻译 Google上Visual Studio Code的10个最佳技巧

Google上Visual Studio Code的10个最佳技巧毋庸置疑,Visual Studio Code是最好的编程编辑器。它强大的编辑,代码智能,源代码控制功能和键盘快捷键是Visual Studio Code的一些最佳功能 ,可以帮助您提高生产力。在本文中,我们将向您介绍Visual Studio Code的10个最佳技巧,这些技巧可以帮助您和任何开发人员提高效率。Visual Studio代码提示1)在Visual Code中安装新主题在Visual Code中,您可以轻松安装主题

2020-09-05 16:17:59 721

原创 Qt多线程下实现数据库的SINGLETON模式

一、singleton模式介绍singleton模式能够为一个类定义唯一的对象,并通过一个静态成员函数访问这个对象。一个更简单的做法是在一个函数中将该类的对象定义为一个静态局部对象,然后让该函数返回该对象地址。二、使用QAtomicPointer实现多线程操作数据库本人直接贴代码,不想讲原理了。你们直接看吧,同时也把测试代码贴出来头文件:connectionpool.h#ifndef ...

2020-03-17 20:41:23 450

原创 QT5插件制作

一、Qt插件机制1、Qt插件简介插件是一种遵循一定规范的应用程序接口编写出来的程序,定位于开发实现应用软件平台不具备的功能的程序。2、Qt插件APIQt提供了两种API用于创建插件:一种是高阶API,用于扩展Qt本身的功能,如自定义数据库驱动,图像格式,文本编码,自定义样式等;一种是低阶API,用于扩展Qt应用程序。3、通过插件扩展应用程序功能A、定义一个接口集(只有纯虚函数的类),用...

2020-03-12 11:15:13 710 1

项目的源代码,喜欢的话可以下载看看

src里面的dll需要放在调试生成的exe文件路径下,否则不能运行,我自己的Qt版本位Qt5.12。界面比较土,可以自己设计更改,欢迎吐槽,有问题可以问我。

2020-02-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除