
c/c++
纵使微芒如烟
古人之观于天地、山川、草木、虫鱼、鸟兽,往往有得,以其求思之深而无不在也。夫夷以近,则游者众;险以远,则至者少。而世之奇伟、瑰怪,非常之观,常在于险远,而人之所罕至焉,故非有志者不能至也。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
关于线程池的设计和使用场景·浅析
线程池的设计对于线程池可以有很对中设计,最常见的有master-slave模型,和通用线程池。1. master-slave:一个主控线程和多个工作线程,线程池的调度由master线程来执行。2. 通用线程池,如常见的半同步半异步线程池。线程池中的所有线程的地位平等,线程池的所有线程平等竞争池中的任务(variable_condition)3. 设计线程池的原因:线程池的目的在于更大效率的...原创 2019-10-28 16:46:53 · 220 阅读 · 0 评论 -
gdb调试篇
GDB http://ftp.gnu.org/gnu/gdb/ http://www.gnu.org/software/gdb/ GDB, the GNU Project debugger, allows you to see what is going on `inside’ another program while it executes – or what another...转载 2019-10-24 23:13:27 · 220 阅读 · 0 评论 -
关于c++基类,继承类,子对象的构造和析构顺序
构造和初始化的区别两者从意义上而言:1)初始化:一个变量或者一个对象在产生的时候就赋予一个值,属于伴随性质2)赋值:在一个变量或者一个对象在产生之后的任意时刻赋予一个值,属于任意性质构造函数:1)函数的名字与类的名字相同2)在创建一个对象时,构造函数就自动执行,但是在声明一个类的指针对象时,构造函数不会被调用,当new一个空间的时候,构造函数才会被调用3)构造函数一般用来对数...原创 2019-10-17 21:59:52 · 1360 阅读 · 0 评论 -
关于虚基类和多继承
c++和pyhon都是允许多继承的。但由于被继承的多个父类可能直接或间接继承自一个基类,那么此时就有可能会产生一个结果,在此定义的class中包含多个同一基类的多个副本,这种情况在大多数时候是没有意义的,反而会在逻辑上造成二义性的错误。举个栗子class A{public:void func(){}};class B: public A{};class C: pu...原创 2019-07-16 11:12:28 · 476 阅读 · 0 评论 -
向前声明,延迟定义
当两个类都需要引用对放的定义的时候,我们可以采取延期实现来避免矛盾。#include<iostream>class T{public: void func(); //这里T的func函数的实现需要Test的定义,需要可见Test的定义,延迟吧};class Test {public: friend void T::func(); //这里T...原创 2019-06-22 14:51:39 · 278 阅读 · 0 评论 -
c++函数重载详解
先是简单理解下函数重载的概念:同一域内的同名函数在函数参数类型,参数个数,参数顺序上具有不同,则互为重载。 ps:函数重载不包括函数返回值类型哟. 然后就是揭开一些c++的迷雾: 常成员函数的重载: class Test{ //成员函数func void fun...原创 2019-06-12 12:54:24 · 855 阅读 · 0 评论 -
顶层const和底层const
清晰一组概念: 首先只有指针才存在顶层与底层const之别(引用也可以算有(引用的本质是指针.)).然后简述下const的用法:const修饰的类型: 首先看const前面是否有类型(type),如果有就是修饰前面的type否则向后看。实例:const int a;//const 修饰intint const a;//const修饰intc...原创 2019-06-12 12:47:41 · 338 阅读 · 0 评论 -
关于Http协议中的Range字段详解
个人空间(后台就是c/c++写的httpserver)=首先Range字段的作用是支持http协议的范围请求,而范围请求的用途多用于客户端多线程请求服务端某一资源,实现高效并发。扫描二维码看MDN文档对Http.Range字段的描述,应该比我写的好,或者Http协议的Range字段-----MDN然后我再说点我的踩的坑:一下是我的httpserver收到的...原创 2019-06-12 00:27:31 · 8012 阅读 · 1 评论 -
this指针的原理和应用(c++)
感觉网上很少说this指针的原理,然后知道的就知道,不知道就不知道。然后,奔着昊天的使命,我来简单的说一说呗(×diss).this是什么? 从上图看来,this是一颗 Class_name *的指针派生类型,然后还有些问题解决,我放到后面来解释const问题。 为什么成员函数中可以使用this指针? 每一个成员函数都拥有一个指向调用该函数的类对象的隐藏指针,这个指...原创 2019-06-20 20:39:07 · 3640 阅读 · 0 评论 -
mutable c++浅析
mutable:易变的,意思和volatile相近,但是两个关键字的用法不同。volatile主要应用于多线程,这里不做详细讨论。穷则变,变则通,mutable就是这样,先讨论下mutable在类中的应用:在类中,mutable只能用于修饰类的数据成员。 其作用在于说明在成员总是可以改变的,即使是在该类的const对象的const成员函数中。 mutable和const不能同时使用。...原创 2019-06-20 19:59:38 · 516 阅读 · 0 评论 -
SO_RCVTIMEO超时errno
首先打印一次recv调用失败的errno值和各个宏的值.由上可知,EAGIN和EWOULDBLOCK的值都是11,其实EAGIN是在setsockopt设置SO_RCVTIMEO或SO_SNDTIMEO后,recv或者send系列函数超时等待返回-1,此时的errno值。EWOULDBLOCK则是大家熟悉的异步调用产生的errno。recv return -1,errn...原创 2019-06-03 23:44:10 · 896 阅读 · 0 评论 -
进程退出码$?
目录description:如何查看进程退出码:分析退出码:a.正常退出:b.异常退出对异常的进程退出码进行分析:关于信号的具体分析:description:Linux 下进程的退出分为正常退出和异常退出两种:1.正常退出 a. 在main()函数中执行return。 b.调用exit()函数 c.调用_exit()...原创 2019-06-03 23:43:05 · 526 阅读 · 0 评论 -
http中的SIGPIPE处理
问题描述:在我实现http1.1 server的过程中,当客户端和浏览器存在数据传输时,如果客户端断开连接(浏览器刷新或关闭),我的服务器就总是崩溃。求思:程序异常退出,首先查看进程退出码echo $?然后分析退出码结果分析:由此可知,我的进程异常退出的原因是由于客户端连接服务器传数据过程中,客户端断开连接,导致s...原创 2019-06-03 23:41:57 · 228 阅读 · 0 评论 -
linux创建动态库
静态库的创建和使用:- g++ add.cpp生成add.o目标文件- ar cqs libadd.a add.o - ar打包目标文件(elf中的relocatable文件) - 静态库的名字lib[static_library_name].a- 链接静态库.- g++ main.c -L . -ladd- 静态库的链接语法和动态库基本语法一致.动态库的创建和使用:- g+...原创 2019-06-03 23:36:46 · 922 阅读 · 0 评论 -
epoll十问之close
Q6 Will closing a file descriptor cause it to be removed from all epoll sets automatically? A6 Yes, but be aware of the following point. A file descriptor is a reference to an open file de...原创 2019-07-09 21:01:37 · 752 阅读 · 0 评论 -
VS2019配置跨平台win-linux开发
在这里,悬着gdb就行了,gdbserver需要在linux端安装.调试->选项->跨平台最后,如果不行,在关掉当前项目,新建个linux空项目.提供一段测试代码:test1:#include <sys/epoll.h>#include <sys/socket.h>#include &...原创 2019-07-15 17:58:37 · 4962 阅读 · 0 评论 -
FD_CLOEXEC用法及原因_转
FD_CLOEXEC用法及原因_转 </h1> <div class="clear"></div> <div class="postBody"> 转自:使用FD_CLOEXEC实现close-on-exec,关闭子进程无用文件描述符我们经常会碰到需要fork子进...转载 2019-10-04 18:58:46 · 237 阅读 · 0 评论 -
HTTPS c++的第一个小栗子
首先简单备注一下openssl开发ssl_server的流程:1. 在使用ssl库之前需要对库进行初始化: SSL_library_init(void); OpenSSL_add_ssl_algorithms(); SSLeay_add_ssl_algorithms(); note: 三个函数任选一个,事实上后两者是第一个的宏.2. 构造SSL通信的...原创 2019-10-03 23:34:48 · 712 阅读 · 5 评论 -
c++11关键字noexcept
1 关键字noexcept`在这里插入代码片`从C++11开始,我们能看到很多代码当中都有关键字noexcept。比如下面就是std::initializer_list的默认构造函数,其中使用了noexcept。 constexpr initializer_list() noexcept : _M_array(0), _M_len(0) { }该关键字告诉编译...转载 2019-09-30 18:05:18 · 4325 阅读 · 0 评论 -
linux-Mutex实现进程间的互斥.
在linux的ipc进程通信中,semaphore是可以实现进程间共享互斥的,然而对于mutex,rwlock,spinlock默认的都是进程内的线程间的同步互斥(虽然也是process假装的),本篇通过修改mutex默认属性来实现进程间的mutex。参考man mutex*,从man pthread_mutexattr_setpshared得知mutex的共享属性选项有两个:PTHREAD_...原创 2019-09-22 15:08:09 · 1994 阅读 · 0 评论 -
记录一个关于universal reference, 我犯下的滔天大错。
错误描述: #ifndef LINKQ_GDL_H #define LINKQ_GDL_H #include<type_traits> #include<functional> #include<iostream> #include<utility> #include<memory> namespace gdl { ...原创 2019-09-12 21:15:47 · 246 阅读 · 0 评论 -
c++封装类似c#Lazy--延迟求值
前言:延迟求值:有些时候我们将任务打包好,然后并不直接执行,然后对这列任务包进行调度。-其实在c++中延迟求值,最常用的方式就是使用生成器(functor), 即std::function来实现,std::package_task内部原理也一样,lambda表达式的原理也是这样的。这个和c#中的Lazy的特性,和python中的闭包类似。道理一样。---关于延迟求值得应用: ...原创 2019-09-11 23:51:16 · 267 阅读 · 0 评论 -
lambda表达式
lambda表达式参考原创 2019-08-16 23:34:37 · 120 阅读 · 0 评论 -
c++对象模型简介
#1.简单对象模型.#表格驱动模型.#3.c++对象模型.其中,只有c++对象模型被各大编译器厂商应用,其实动态语言,如python使用的就是类似简单对象模型,引用!1. c++对象模型把非静态数据成员放在每一个对象中,静态数据成员,静态函数和非静态成员函数放在对象之外,2. 对于虚函数的实现: 1. 由类产生一个虚表(vtbl), 表...原创 2019-07-17 19:28:57 · 171 阅读 · 0 评论 -
虚函数和多态性浅析.
多态:向不同的对象发送相同的消息,而产生不同的动作。静态类型:对象(引用,指针)声明时的类型。动态类型:当前的对象实际指向的类型。在继承关系中,指针或引用的静态类型和动态类型是可以不同的。class A{};class B:public A{};B mb;A *pa = &mb;//此时,pa的静态类型是A*,动态类型是B.在继承关系中,对象(引用,指针除外)的静态类型...原创 2019-07-17 00:14:26 · 347 阅读 · 0 评论 -
服务器压力测试
简单动手,写一个windows平台的服务器承压测试软件. 类似于apache的ab.#include<iostream>#include<atomic>#include<thread>#include<condition_variable>#include<mutex>#include<stdlib.h>...原创 2019-07-15 23:38:00 · 818 阅读 · 0 评论 -
动态库的链接详解-linux
链接动态库为什么需要链接?作为编译的最后一公里和运行的刚需。linux从程序(program或对象)变成进程(process或进程)简单的说分三步: 1、fork进程,在内核创建进程相关内核项,加载进程可执行文件; 2、查找依赖的so,一一加载映射虚拟地址 3、初始化程序变量。来看一看链接的细节:此文环境[root@VM_0_9_centos dynamic_...原创 2019-06-03 23:36:07 · 460 阅读 · 0 评论 -
template --- decay
对于非引用类型的参数,在实参演绎的过程中会出现从数组到指针(array-to-pointer)的类型转变,称之为退化(decay)test.h#include<iostream>#include<typeinfo>template<class T>void ref(T& t) { std::cout << typeid(t).n...原创 2019-06-03 23:06:46 · 119 阅读 · 0 评论 -
_CRT_SECURE_NO_WARNINGS 安全属性检查的屏蔽方案
1>—— 已启动生成: 项目: Prim, 配置: Debug Win32 —— 1> main.cpp 1>d:\data\programming_c++\prim\prim\prim.h(29): error C4996: ‘freopen’: This function or variable may be unsafe. Consider using freope...原创 2018-05-03 14:50:37 · 434 阅读 · 0 评论 -
dll动态链接库文件编写
dll动态链接库文件编写 转载 2017年12月02日 20:50:52 标签: ...转载 2018-04-12 18:15:39 · 1581 阅读 · 0 评论 -
_stdcall....函数调用约定
C/C++函数调用约定:C 语言有 __cdecl、__stdcall、__fastcall、naked、__pascal。 C++ 语言有 __cdecl、__stdcall、__fastcall、naked、__pascal、__thiscall,比 C 语言多出一种 __thiscall 调用方式。1、__cdecl __cdecl调用约定又称为 C 调用约定,是 C/C++...转载 2018-06-04 22:01:13 · 315 阅读 · 0 评论 -
AllocConsole之重新打开stdin,stdout,stderr
在win32程序中如果需要控制台 可以调用API: AllocConsole()#include<windows.h>#include<iostream>int WINAPI WinMain(HINSTANCE hpreinstance, HINSTANCE hinstance,LPSTR str, int show){ AllocConsole...原创 2018-06-04 22:13:07 · 1229 阅读 · 0 评论 -
指针和数组详解
指针和数组.念叨了这么多年的指针,咱来看看指针的定义:指针(K&C): 指针是一种保存变量地址的变量. ps: 这里的指针是指的指针类型变量,简称指针或指针变量. ps: 注意!标准中把指针的类型称为 "(指向)T的指针"在ANSI C89中有这样的描述: 1.指针类型可以由函数类型,对象类型或者不完整类型派生。 2.派生指针类型的类型称为引用类型,从引用类型构造指针...原创 2019-06-03 23:04:17 · 126 阅读 · 0 评论 -
常量折叠
原文链接,写得很好了,转载下,避免以后找不到 今天回顾了大学这几年学习C++的点点滴滴,在回顾了“常量折叠”这里时,突然困惑了,当时学习这点知识时的理解是:可折叠的常量像宏一样,在预编译阶段对常量的引用一律被替换为常量所对应的值,就和普通的宏替换没什么区别,并且,编译器...转载 2019-06-14 23:33:38 · 467 阅读 · 0 评论 -
关于作用域和生存期浅析
作用域:作用域的作用:避免名字冲突。作用域的分类:全局作用域,局部作用域,函数作用域,函数原型作用域,文件作用域,名字空间作用域,类作用域。全局作用域:即程序的作用域。局部作用域:代码块中的{}函数原型作用域:即函数声明(非定义)是参数列表形参的作用域,该作用域仅仅在形参列表,故一点也不重要。函数作用域:只有用作goto语句的标号才具有函数作用域!!!函数体{}是局部作用域!...原创 2019-06-19 12:29:41 · 777 阅读 · 0 评论 -
关于const引起的内链和外链问题详解
在此之前,我们先来了解一点东西:在c++语言编译的过程中解析都是由内向外的,即局部作用域->文件作用域->全局作用域 const说明的全局变量默认是内链的,可以加上extern来使其外链。 具有外链特性的对象应该在全局作用域中使用extern加以说明,并对其进行初始化或定义。 全局对象默认是外链的。那么,让我们一起来查看两个实例:实例一:[root@VM_...原创 2019-06-18 22:53:37 · 268 阅读 · 0 评论 -
关于函数的调用和函数的匹配规则浅析
//这里我不包含关于模板的详细匹配规则.首先明白两个概念:函数匹配:调用函数时,究竟调用哪一个重载函数。二义性:错误情况,是指在调用重载函数时编译器不知道应该调用哪一个重载函数(有多个可选函数)。函数的匹配过程如下:1.确定候选函数:与被调函数同名的函数,并且在调用出这些函数在调用点是可见的。2.选择可行函数:从候选函数中选择一个或者多个函数,这些函数都是可以被调用函...原创 2019-06-12 20:30:15 · 849 阅读 · 0 评论 -
CreateWindow失败的原因
Before returning, CreateWindow sends a WM_CREATE message to the window procedure. For overlapped, pop-up, and child windows, CreateWindow sends WM_CREATE, WM_GETMINMAXINFO, and WM_NCCREATE messages to...原创 2018-09-29 22:05:25 · 3267 阅读 · 0 评论 -
关于g++的简单使用
关于g++g++ 是GNU组织开发出的编译器软件集合(GCC)下的一个C++编译器。它是Unix 和 Linux 系统下标配的 基于命令行的 C++编译器。如果你的系统是Windows,可以按照下面的教程安装g++。 Windows下安装g++一、下载minGW(适用于Windwow的GCC工具集合)链接:http://pan.bai...转载 2018-10-13 20:18:14 · 4113 阅读 · 0 评论 -
关于缓冲区溢出
http://www.360doc.com/content/15/0228/16/7591436_451517260.shtml 当 David LeBlanc 和我确定《Writing Secure Code》一书的目录时,我们明确地意识到必须着重介绍缓冲区溢出问题,因为已经有太多的开发人员在编写代码时犯了太多的此类错误,这些错误导致了可被人利用的缓冲区溢出的出现。在...转载 2018-09-23 10:28:13 · 1920 阅读 · 0 评论