C++11
文章平均质量分 73
月亮+六便士
本人从事C++嵌入式应用软件开发,做流媒体相关工作,后端开发
展开
-
c++ std::call_once
在多线程中,有一种场景是某个任务只需要执行一次,可以用C++11中的std::call_once函数配合std::once_flag来实现。多个线程同时调用某个函数,std::call_once可以保证多个线程对该函数只调用一 次。原创 2023-02-15 14:04:23 · 1505 阅读 · 0 评论 -
c++ bind 函数讲解
c++ bind 函数讲解原创 2023-02-14 14:33:28 · 1900 阅读 · 0 评论 -
centos创建共享目录
Centos8配置共享文件目录流程Windows下创建共享目录命名:warkspace虚拟=====????设置====????选项===????共享文件夹共享目录设置后,查看/mnt/hgfs/下面发现不显示设置的共享文件夹,重启设置都没有解决方法:方法一:重新安装VMware Tools(网上说采用这种方法,自己没有试)方法二:找到位于VMwore 安装目录下的linux.ios文件打开虚拟机,将linux.ios直接放置桌面,解压、进入 目录,执行./vmware-i原创 2021-08-12 14:28:18 · 827 阅读 · 0 评论 -
五种I/O模型
I/O介绍I/O通常有内存IO、网络I/O、磁盘I/O等,但我们通常说的是网络I/O以及磁盘I/O。网络I/O本质是socket读取。每次I/O氢气,都会有两个阶段:第一步:等待数据,即数据从磁盘到内存,将数据从磁盘文件先加载到内核内存空间(缓冲区),等待数据准备完成,时间较长。第二步:复制数据,即数据内核内存到进程内存,将数据从内核缓冲复制到用户空间的进程内存中,时间较短。Web请求处理过程1、客户端发起情况到服务器网卡2、服务器网卡接收到请求和转交给内核处理3、内核根据...原创 2020-07-26 21:02:34 · 709 阅读 · 0 评论 -
进程、线程、协程的定义
进程,是操作系统资源分配和调度的一个独立单位,是系统资源分配的最小单位。进程一般是由代码、数据和进程空间三部分组成。进程在内存中有自己独立的内存空间(堆)。进程的状态线程是CPU的调度执行的最小单位,一个标准的线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。一个进程可以包含多个线程,线程之间共享进程的内存空间。 线程的状态协程,英文是Coroutines,是一种基于线...原创 2020-07-18 16:52:33 · 249 阅读 · 0 评论 -
c++ 中explicit的作用
1、explicit作用在c++中,explicit关键字用来修饰类的构造函数,修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。explicit使用注意事项: explicit 关键字只能用于类内部的构造函数声明上。 explicit 关键字作用于单个参数的构造函数。在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换例子: 未加explicit时的隐式类型转换 1. class C...转载 2020-06-30 11:25:33 · 1873 阅读 · 0 评论 -
c++11下的单例模式
一、原来的单例模式设计流程 1、构造函数修改为私有; 2、定义一个私有的静态成员变量(返回指针); 3、定义一个全局的静态成员函数(返回指针); 4、通过全局静态成员函数实现控制类的实例化的唯一性。二话不说上代码,以前代码:#include <pthread.h>//pthread.h是在linux编程环境下才使用using namespace std;class Singleton{private...原创 2020-06-29 16:26:31 · 1287 阅读 · 0 评论 -
c++ 中NULL和nullptr的区别
在编写c程序时候只看到过NULL,而在C++的编程中,我们可以看到NULL和nullptr两种关键字,其实nullptr是C++11版本中新加入的,它的出现是为了解决NULL表示空指针在C++中具有二义性的问题,为了弄明白这个问题,我查找了一些资料,总结如下。一、C程序中的NULL在C语言中,NULL通常被定义为:#define NULL ((void *)0)所以说NULL实际上是一个空指针,如果在C语言中写入以下代码,编译是没有问题的,因为在C语言中把空指针赋给int和char指针的时候,发原创 2020-06-19 14:32:54 · 306 阅读 · 0 评论 -
C++ 中,auto 关键字
在函数返回值/range-for 等情况中1、auto使用 有5种用法 auto:拷贝 auto&:左值引用,只能接左值(和常量右值) auto&&:万能引用,能接左值和右值 const auto&:const 万能引用,能接左值和右值 const auto&&:常量右值引用,只能接右值很多人直接就写成 auto&&,但尽量分场景使用 auto:用于你...原创 2020-06-18 19:20:47 · 1269 阅读 · 0 评论 -
遇到c++编译undefined reference to “std::ios_base::Init::Init()”错误的解决方案
root@localhost testDemo]# gcc -o mydemo mydome.cpp/tmp/ccx5MfhH.o: In function `main':mydome.cpp:(.text+0xf): undefined reference to `operator new(unsigned long)'/tmp/ccx5MfhH.o: In function `__static_initialization_and_destruction_0(int, int)':myd原创 2020-06-10 09:08:39 · 1732 阅读 · 0 评论 -
const关键字讲解
主要概括const除了修饰常量外,更重要的应用是修饰函数,放在函数不同的位置起到的作用也不同,按照接下来文章以下三部分展开:const修饰函数参数const修饰函数返回值const修饰this指针const修饰函数参数 int getVal(int arg,const Sale_Item &item);Sale_Item 是一个用户自定义类, Sale_Item &item表示 Sale_Item 以引用的方式创建一个对象。这里可能有人就有疑问了。为什...原创 2020-06-09 22:36:52 · 376 阅读 · 0 评论 -
extern讲解
1、基本解释extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。2、问题:extern变脸在一个源文件定义了一个数组:char a[6];在另一个文件里用下列语句进行声明:extern char *a;请问这样可以吗?答案分析:1)肯定是不可以的。程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声...原创 2020-06-02 23:07:38 · 256 阅读 · 0 评论 -
log4j按照时间或者大小生成log文件的配置方案
我们开发的B/S结构系统,在服务端一般要有日常运行的日志记录。保存成日志文件形式的时候,大家经常会遇到一个问题:日志文件过大。上百兆的日志文件对 查阅日志信息来说也是一个问题。所以我希望能够每天或每个月产生一个日志文件,这样文件不至于过大。 或者根据日志文件大小来判断,超过规定大小,日志自动增加新文件。在log4j中这两种方式的实现都很简单,只要在配置文件中设置即可。一、按照一定时间...原创 2020-05-08 10:13:12 · 553 阅读 · 0 评论 -
C++ spdlog日志库
spdlog 是一个快速的 C++ 日志库,只包含头文件,兼容 C++11。特性:非常快 只包含头文件 无需依赖第三方库 支持跨平台 - Linux / Windows on 32/64 bits 支持多线程 可对日志文件进行循环输出 可每日生成日志文件 支持控制台日志输出 可选的异步日志 支持日志输出级别 可自定义日志格式示例代码:#include "spd...原创 2020-04-14 16:31:19 · 2052 阅读 · 0 评论 -
boost::locale::conv:: 字符编码转换
相关字符集转换函数功能摘要:std::string boost::locale::conv::between ( char const * begin,char const * end,std::string const & to_encoding,std::string const & from_encoding,method_type how = de...原创 2020-04-13 14:20:26 · 1201 阅读 · 0 评论 -
如何使用Google日志库
Google Glog 是一个C++语言的应用级日志记录框架,提供了 C++ 风格的流操作和各种助手宏。1、开源项目首页已经从https://code.google.com/p/google-glog/迁移到https://github.com/google/glog。2、下载代码后,双击根目录下的google-glog.sln3、在解决方案下有四个工程:libglog(是动态链接库...原创 2020-03-19 16:03:09 · 1281 阅读 · 2 评论 -
网络排查监听端口
方法一:netstatzljump@test-pressure-zlstream-01 ~]$ netstat -anp | grep "sdu"(No info could be read for "-p": geteuid()=1002 but you should be root.)[xzljump@test-pressure-zlstream-01 ~]$ sudo netst...原创 2020-03-10 15:49:22 · 871 阅读 · 0 评论 -
Linux c++/c UTF-8 GB2312中文转码实现
#include <iconv.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#define OUTLEN 255 //代码转换:从一种编码转为另一种编码int code_convert(char *from_charset,char *to_charset...原创 2020-03-10 15:25:45 · 1731 阅读 · 0 评论 -
C++ 指针详解
前沿:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧:intp; //这是一个普通的整型变量...原创 2020-02-08 21:05:11 · 428 阅读 · 0 评论 -
Linux coredump调试
一、概念Coredump: Coredump叫做核心转储,它是进程运行时在突然奔溃的那一刻的一个内存快照。操作系统在程序发生异常而异常在进程内部又没有在内部灭有被捕获的情况下,会把进程此刻内存、寄存器状态、运行堆栈等信息转储保存在一个文件里。 该文件也是二进制文件,可以使用gdb、elfdump、objdump或者windows下的windebug、so...原创 2020-02-08 13:58:07 · 3737 阅读 · 0 评论 -
环形队列使用之万能模板
环形队列在之前的篇幅中已经介绍了,这里介绍使用一种万能的模板适合任意场景#ifndef _CIRCLESESSION_H_#define _CIRCLESESSION_H_#include<iostream>#include<stdio.h>#include<string.h>using namespace std;template <t...原创 2019-12-12 10:38:03 · 186 阅读 · 0 评论 -
Ring buffer环形队列使用
环形缓存区: 环形缓冲器(ringr buffer),也称作圆形队列(circular queue),循环缓冲区(cyclic buffer),圆形缓冲区(circula buffer),是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流。背景: 当有大量数据的时候,我们不能存储所有的数据,那么计算机处理数据的时候,只能先处理先来的,那么处理完后...原创 2019-11-25 22:44:23 · 1267 阅读 · 1 评论 -
C++11智能指针
1.auto_ptr这个指针采用了所有权的方式,#include<memory>#include <iostream>using namespace std;int main() { auto_ptr<string> p_s1(new string("this is a string")); cout << *p_s1.get(...原创 2019-11-11 23:00:16 · 95 阅读 · 0 评论