- 博客(161)
- 资源 (1)
- 收藏
- 关注
原创 C++编译优化RVO&NRVO&复制省略
编译器优化技术现代编译器缺省会使用 RVO(return value optimization,返回值优化)、NRVO(named return value optimization、命名返回值优化)和复制省略(Copy elision)技术,来减少拷贝次数来提升代码的运行效率。注1:vc6、vs 没有提供编译选项来关闭该优化,无论是 debug 还是 release 都会进行 RVO 和复...
2021-04-24 15:52:00
425
原创 C++11的enable_shared_from_this
c++11 中的 shared_from_this() 来源于 boost 中的 enable_shared_form_this 类和 shared_from_this() 函数,功能为返回一个当前类的 std::share_ptr,使用方法如下:#include<memory>class Test: public std::enable_shared_from_this<...
2021-04-24 15:50:00
273
原创 条件变量中pthread_cond_wait函数
首先看一个生产者和消费者实例,主线程作为生产者,它先创建很多消费者线程,再给队列中放入产品#include <bits/stdc++.h>#include <iostream>#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <s...
2020-09-19 20:59:00
325
1
原创 C++ tuple元组
tuple元组tuple是一个元组容器,可以用于函数返回多个值, 一个tuple元组可以有任意数量的成员tuple的两种初始化方式:tuple<int, int> t1(1, 2);tuple<int, int> t2{1, 2};make_tuple用于生成tuple对象,和pair和make_pire类似:auto t3 = make_tuple(...
2020-09-15 00:18:00
245
原创 操作系统面试题总结
进程的常见状态?以及各种状态之间的转换条件?创建状态:进程在创建时需要申请一个空白PCB,向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态就绪状态:进程已经准备好,已分配到所需资源,只要分配到CPU就能够立即运行执行状态:进程处于就绪状态被调度后,进程进入执行状态阻塞状态:正在执行的进程由于某...
2020-08-26 02:43:00
796
原创 Socket编程的基本函数
基本的套接字编程socket函数想要执行网络I/O,首先需要调用socket函数创建套接字,需要头文件#include <sys/socket.h>int socket (int domain, int type, int protocol);参数:domain : 执行协议域,取值如下:domain说明AF_INETIPV4协议AF...
2020-08-02 23:25:00
459
原创 Linux下SVN操作常用命令
检出svn co http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名 --password 密码svn co svn://路径(目录或文件的全路径) [本地目录全路径] --username 用户名 --password 密码svn checkout http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名...
2020-07-01 21:49:00
297
原创 C++11的function函数对象
C++函数种类C++中的函数种类很多:函数函数指针Lambda函数bind创建的对象仿函数(重载了函数调用运算符的类)但这些函数可能共享一种调用方式。调用形式指明了调用返回的类型以及传递给调用的实参类型。比如:int(int, int);使用functionstd::function是一个通用的多态函数包装器,可以调用普通函数、Lambda函数、仿函数、bind对象...
2020-06-10 00:52:00
613
原创 C++11的bind函数
参数绑定如果一个函数只在一两个地方操作,使用Lambad很方便,如果在很多地方操作,编写多次相同的Lambda函数就很不方便,需要定义函数。但是,定义的函数又不能完全代替能捕捉局部变量的Lambda函数,所以就出现了bind函数。bind函数是C++11标准库的函数,需要添加头文件#include <functional.h>bind就是一个通用的函数适配器,它可以...
2020-06-09 00:23:00
445
原创 QTcpServer服务器无法监听和客户端连接不上问题
使用 QTcpServer ,使用 listen 函数监听局域网地址 (192.168.97.217)的时候,发现返回的结果为 false,无法监听,通过语句qDebug() << server->errorString(); 打印出的错误字串为The proxy type is invalid for this operatoin;但是,当我修改绑定的地址语句为 ...
2020-05-20 11:51:00
5654
1
原创 Windows10禁用WD(Windows Defender)和启用方法
来自yaya141319大佬从神州版Win10得到的方法使用方法:新建一个XXX.bat文件,将代码复制进去,右键管理员方式运行。禁用Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender]"DisableAntiSpyware"=...
2020-04-30 20:54:00
5368
1
原创 vim 分屏基本操作
vim 分屏操作横竖分屏打开新文件:sp filename:split filename:vsp filename:vsplit filename:sview filename ->只读分屏打开文件从命令行直接打开多个文件且是分屏vim -On file1, file2 ... ->垂直分屏vim -on file1, file2 ... ->...
2020-04-28 10:08:00
319
原创 GDB 调试多线程程序的总结
gdb 中step、next与finish的区别step 就是单步执行,遇到子函数就进入并且继续单步执行;在其他调试其中相当于step-into命令,作用是移动到下一个可执行的代码行。如果当前行是一个函数调用,则调试器进入函数并停止在函数体的第一行。step可以帮助初步揭开代码位置的谜团,例如:函数调用和函数本身可能在不同的文件中。next 是在单步执行时,在函数内遇到子函数时不会进...
2020-04-27 11:06:00
422
原创 vim常用快捷键笔记
模式切换Vim一共有4个模式:正常模式 (Normal-mode) :正常模式一般用于浏览文件,也包括一些复制、粘贴、删除等操作插入模式 (Insert-mode):在正常模式中按下i, I, a, A等键命令模式 (Command-mode):在正常模式中,按下:(冒号)键,会进入命令模式可视模式 (Visual-mode):在正常模式按下v, V, \<Ctrl&g...
2020-04-26 16:47:00
192
原创 shell脚本的常用参数
文件表达式-e filename 如果 filename存在,则为真-d filename 如果 filename为目录,则为真-f filename 如果 filename为常规文件,则为真-L filename 如果 filename为符号链接,则为真-r filename 如果 filename可读,则为真-w filename 如果 filename可写,则为真-x...
2020-04-24 16:52:00
276
原创 Qt中使用Protobuf简单案例(Windows + msvc)
编译protobuf首先下载protobuf源代码使用cmake,配置相关路径和配置注意选择生成动态链接库,在windows上最好勾选动态链接库,否则会出现很多麻烦点Generate,生成VS的工程文件。然后打开vs,选择release或debug点击解决方案直接右键选择生成解决方案即可。注意:debug生成的库在Qt中只能在debug下使用,release生成的库只能在relea...
2020-03-29 20:58:45
1081
原创 使用PicGo和Typora写Markdown
前言喜欢写博客的朋友们经常会选择使用Markdown格式,因为现在主流的博客平台都支持并推荐使用Markdown。但是不好的地方是,在Markdown中显示图片成了问题,因为需要一个图床来保存图片,只需要引入图片链接即可,虽然已经有了很多免费图床,但有时候会失效,所以还是推荐搭建自己的图床,这里,选择使用github免费仓库和PicGo来搭建自己的图床下载 PicGoPicGo下载...
2020-03-28 20:02:00
234
原创 CentOS7安装protobuf(C++)和简单使用
下载 protobuf下载地址使用wget下载,或者手动下载好FTP传到Linux上在Linux 64位环境下进行编译我下载的是protobuf-all-3.11.4.tar.gz 包首先解压tar zxvf protobuf-all-3.11.4.tar.gz进入解压目录cd protobuf-3.11.4/安装 protobuf此时可能会遇到报错,如:autore...
2020-03-22 01:49:00
1599
原创 protobuf编译、安装和简单使用C++ (Windows+VS平台)
windows下安装Protobuf首先需要下载源代码下载如下cpp版本解压后得到一个目录,等下CMake会用到如果你电脑没有CMake,需要去官网下载双击打开下载解压后的CMake目录/bin/cmake-gui.exe现在,选择刚才解压的目录,和构建输出目录然后选择Configure选择你的VS版本,然后finish即可点击Generate,成功后,进入生...
2020-03-21 22:44:00
1150
原创 protocol buffers 文档(一)-语法指导
前言翻译查阅外网资料过程中遇到的比较优秀的文章和资料,一是作为技术参考以便日后查阅,二是训练英文能力。此文翻译自 Protocol Buffers 官方文档 Developer Guide 部分protocol buffers 介绍protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于通信协议、数据存储等。protocol buffer...
2020-03-21 01:39:00
757
原创 Base64编码和其在图片的传输的应用
Base64[原文链接]目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。那么,Base64到底起到什么作用呢?在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此类似,网络上传输的字符并...
2020-02-27 16:07:00
830
原创 Qt程序打包发布
编译程序以 Release 方式编译生成 exe 程序.exe就在你源码的同目录build-MicroChat-Desktop...下,直接双击打开会提示缺少一些库依赖库先新建一个文件夹,将这个.exe文件移动到这个文件夹中,首先使用Qt命令行找到对应的编译器,然后打开,输入cd /d D:\HelloWorld(你的路径),使用windeployqt命令执行windeplo...
2020-02-25 18:34:00
177
原创 Qt中的Label和PushButton背景图自动缩放设置
Label 背景图自动缩放QPixmap* pixmap = new QPixmap(":/images/HeadIcon/1.png");pixmap->scaled(ui->label->size(),Qt::KeepAspectRatio);ui->label->setScaledContents(true);ui->label-&...
2020-02-23 11:23:00
3145
原创 Qt中实现点击一个label,跳转到打开一个浏览器链接
配置模块首先需要在.pro配置文件中添加QT += network重写自定义Label.h文件class MyClickLabel : public QLabel{ Q_OBJECTpublic: explicit MyClickLabel(QWidget *parent = 0); // 构造函数声明protected: virtual void...
2020-02-15 14:08:00
1597
原创 socket编程中write、read和send、recv之间的区别
一旦,我们建立好了tcp连接之后,我们就可以把得到的fd当作文件描述符来使用。由此网络程序里最基本的函数就是read和write函数了。writewrite函数原型:ssize_t write(int fd, const void*buf,size_t nbytes);write函数将buf中的nbytes字节内容写入文件描述符fd.成功时返回写的字节数.失败时返回-1. 并设置...
2020-02-11 22:40:00
580
原创 详解C/C++中的的:#pragma pack(push) 、#pragma pack(pop) 和#pragma pack()
前言我们知道结构体内存对齐字节可以通过#pragma pack(n) 的方式来指定。但是,有没有想过一个问题,某些时候我想4字节对齐,有些时候我又想1字节或者8字节对齐,那么怎么解决这个问题呢?此时,#pragma pack(push) 和#pragma pack(pop) 以及#pragma pack()应运而生。看测试代码:(说明,64位GCC,默认8字节对齐)屏蔽了的代...
2020-02-11 20:04:00
3302
原创 GCC中 -I、-L、-l 选项的作用
在makefile中经常会看到这些选项,gcc默认会在程序当前目录、path路径中查找所需要的材料如何给gcc添加我们自己的原材料(头文件,库等)-I (注意是大写的i) 给gcc添加自定义的头文件的路径例如:我的头文件目录是myinclude-Imyinclude-L 给gcc添加额外的搜索库的路径例如 :有一个库A所在的路径是目录B-LB-l(小写的L) 给...
2020-02-09 01:39:00
1198
原创 GCC中 -I、-L、-l 选项的作用
在makefile中经常会看到这些选项,gcc默认会在程序当前目录、path路径中查找所需要的材料如何给gcc添加我们自己的原材料(头文件,库等)-I (注意是大写的i) 给gcc添加自定义的头文件的路径例如:我的头文件目录是myinclude-Imyinclude-L 给gcc添加额外的搜索库的路径例如 :有一个库A所在的路径是目录B-LB-l(小写的L) 给g...
2020-02-09 01:38:25
1556
原创 给阿里云主机添加swap分区,解决问题:c++: internal compiler error: Killed (program cc1plus)...
前言今天安装spdlog,一个快速得C++日志库,按照文档步骤,不料出现了一堆错误,像c++: internal compiler error: Killed (program cc1plus)等一堆,刚开始以为环境有问题,弄了一会还是不行,查了一下才知道,是物理内存太小,需要swap分区才行。创建swap分区首先创建用户交换分区的文件,创建2G得分区文件。dd if=/de...
2020-02-09 00:16:00
160
原创 给阿里云主机添加swap分区,解决问题:c++: internal compiler error: Killed (program cc1plus)
前言今天安装spdlog,一个快速得C++日志库,按照文档步骤,不料出现了一堆错误,像c++: internal compiler error: Killed (program cc1plus)等一堆,刚开始以为环境有问题,弄了一会还是不行,查了一下才知道,是物理内存太小,需要swap分区才行。创建swap分区首先创建用户交换分区的文件,创建2G得分区文件。dd if=/dev/zer...
2020-02-09 00:14:01
253
原创 使用 C++11 编写可复用多线程任务池
类的功能Task (任务基类)该类主要实现一个任务类virtual int doWork() = 0;TaskQueue (任务队列)该类主要针对任务的存储、删除、撤回等状态做管理ThreadPool (线程池)整个线程池的核心业务处理类代码Task.h//任务的基类#pragma once#include <time.h>#includ...
2020-02-03 13:27:08
460
原创 Go语言学习-函数
函数Go不是一门纯函数式的编程语言,但是函数在Go中是“第一公民”,表现在:函数是一种类型,函数类型变量可以像其他类型变量一样使用,可以作为其他函数的参数或返回值,也可以直接调用执行。函数支持多值返回。支持闭包。函数支持可变参数。Go是通过编译成本地代码且基于“堆栈”式执行的,Go的错误处理和函数也有千丝万缕的联系。函数定义函数是Go程序源代码的基本构造单位,一个函数的定义包括...
2020-01-24 15:41:16
456
原创 VSCode配置Go插件和第三方拓展包
前言VSCode现在已经发展的相当完善,很多语言都比较推荐使用其来编写,Go语言也一样,前提你电脑已经有了Go环境和最新版本的VSCode插件安装直接在拓展插件中搜索Go,就可以安装Go插件安装之后vscode会弹出该插件还需安装一些扩展工具支持,但是这些工具往往会下载失败,或者仅仅成功一部分比如:Installing github.com/nsf/gocode FAILEDIns...
2020-01-15 11:52:21
1734
1
原创 Qt VS Tools插件官方下载及安装
下载官方下载地址:https://download.qt.io/development_releases/vsaddin/(国外网站直接打开超级慢)找到对应的VS版本下载安装下载完成后安装,打开VS就可以看到VS顶部的Qt VS Tools点击Qt Options->Add->apth,找到你Qt安装的目录对应的如下文件夹QT5.13.2\5.13.2\msvc2017_64...
2020-01-12 13:39:08
24502
4
原创 解决局域网共享问题,提示:无法访问,你可能没有权限使用网络资源
用被访问的机子上:开始->运行->GPEDIT.MSC->计算机配置->WINDOWS设置->安全设置->本地策略->安全选项中的:网络访问:本地帐户的共享和安全模式 改为 经典-XXXXX账户:使用空白密码的本地帐户只允许进行控制登录 改为 已禁用关了WINDOWS的防火墙...
2020-01-04 15:26:35
3539
原创 局域网内进行文件共享
设置共享首先,新建一个共享文件夹或者选择一个文件夹,右键找到属性->共享->高级共享,然后按照以下设置即可还可以点击网络和共享中心,设置一些其他选项访问共享文件再局域网中的其他电脑中,同时按WIN+R运行\X.X.X.X,后面是电脑的地址,然后会让你输入用户名和密码(也可以设置无密码保护的共享),然后在资源管理器的网络中就能访问到共享的文件夹了...
2020-01-04 14:51:11
1622
原创 Win10镜像升级到其他版本
写在前面必须在MSDN下载VL版本系统,一定要是VL版本的。下载镜像,将镜像中的sources/install.wim文件放到D盘下,可以放在其他路径,在命令中的路径就不同,再在D盘创建一个image文件夹,用于防止挂在后的镜像。将下载的补丁放在D盘Hotfix文件夹下面。不能直接从虚拟光驱中操作,因为会报权限不够错误。版本转换以管理员身份运行CMD或者Windows PowerShell...
2020-01-03 18:19:27
1269
原创 Windows恢复环境启动失败,重新配置WinRE
前言现在很多朋友追求系统镜像体积缩小,往往删除了系统镜像中C:\Windows\System32\Recovery\winre.wim这个文件,大小将近500MB,删除这个文件不会给系统造成其他影响,但是如果需要电脑进入恢复模式(RE模式),就会失败,此镜像就是系统恢复模式的文件,没有了此模式,电脑的WinRE就会处于关闭状态,如果想要进入此模式,需要重新打开,但需要一点重新配置操作重新配置并...
2020-01-03 17:32:55
21782
2
原创 Linux下Libevent安装和简单实用
前言Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kq...
2020-01-02 22:53:00
157
muduo-release.zip
2020-06-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人