C++
文章平均质量分 53
wqfhenanxc
这个作者很懒,什么都没留下…
展开
-
C++类互相引用
C++中经常会遇到一个问题:两个类之间互相用到对方。问题: 这种是不是一个好的设计?如果不是一种好的设计,有什么办法规避?如果没办法规避,代码应该如何写来避免出现各种编译或运行问题?参考:https://stackoverflow.com/questions/4964482/how-to-create-two-classes-in-c-which-use-each-other-as-data问题举例File: bar.h#ifndef BAR_H#define BAR_H#include原创 2020-12-16 16:23:40 · 637 阅读 · 0 评论 -
常用链接
https://kjellkod.wordpress.com/ g2log和g3log的作者Kjell Hedström的博客http://moodycamel.com/blogCameron Moody 写了lock free的queuehttps://akrzemi1.wordpress.comAndrzej's C++ blog 很有深度的c++博客https://b...原创 2019-03-29 13:19:13 · 355 阅读 · 0 评论 -
recv、select、poll、epoll解析
转自https://my.oschina.net/editorial-story/blog/3052308从事服务端开发,少不了要接触网络编程。epoll 作为 Linux 下高性能网络服务器的必备技术至关重要,nginx、Redis、Skynet 和大部分游戏服务器都使用到这一多路复用技术。epoll 很重要,但是 epoll 与 select 的区别是什么呢?epoll 高效的原因是什么?网上虽然也有不少讲解 epoll 的文章,但要么是过于浅显,或者陷入源码解析,很少能有通俗易懂的。笔者.转载 2020-05-27 19:25:21 · 1420 阅读 · 3 评论 -
C++开发如何跨越不同版本Linux
Linux的动态加载,支持向下兼容(backward compatibility),也就是说保证在老的系统上生成的可执行程序可以继续在新的系统上运行,但是反过来,Linux并不支持向上兼容(forward compatibility),不保证新的系统上面生成的可执行程序在老的系统上运行。另外,C/C++依赖的glibc/libstdc++/gcc的版本,各个发行版经常会不一样。一般来说,跨所有主流的Linux发行版发布Binary没什么好的办法。方案一、以几个distro作为基准提供...原创 2020-05-18 15:34:41 · 1027 阅读 · 0 评论 -
Windows下使用VS编译输出DLL
一、创建项目和项目配置要想让VS的项目产出DLL,要么在创建项目时候就创建一个DLL项目,要么在配置项目属性的时候设置目标文件扩展名、配置类型为.dll。二、dllmain.cpp中的DllMain函数DllMain函数是DLL模块的默认入口点。当Windows加载DLL模块时调用这一函数。系统首先调用全局对象的构造函数,然后调用全局函数 DLLMain。DLLMain函数不仅在将DLL链接加载到进程时被调用,在DLL模块与进程分离时(以及其它时候)也被调用。DLL程序入...原创 2020-05-14 14:51:53 · 1202 阅读 · 0 评论 -
__cdecl和__stdcall
一、先介绍几个背景知识1. C/C++程序中函数参数入栈顺序默认是从右至左的。 这么设计是为了支持参数个数动态变化。先从栈中取出的,肯定是最左边的参数,这样就能够支持最右边的参数是可选的。反过来想想,如果采用自左向右的入栈方式,最前面的参数被压在栈底,这种情况下只有事先确定了参数个数,才能通过栈指针的相对位移求得最左边的参数,所以就无法支持参数个数动态变化了。2.C/C++程序,栈是从高地址向地地址生长的,也即栈底为高地址,栈顶为低地址。结合1和2,其实我们就可以自己写个C++小程序来验证入...原创 2020-05-14 12:29:35 · 567 阅读 · 0 评论 -
Redhat Linux 安装 gcc 4.4.2
安装gcc 4.4.2 步骤如下:tar -xjf gmp-6.1.2.tar.bz2cd gmp-6.1.2/./configure --prefix=/usr/lib/gmp-6.1.2 && make && make install tar -xjf mpfr-3.1.4.tar.bz2cd mpfr-3.1.4/./configure ...原创 2020-02-05 13:44:40 · 403 阅读 · 0 评论 -
GCC -Wl选项
默认情况下,GCC/G++链接时优先链接动态库,如果没有动态库,则链接相应的静态库。同时,GCC/G++也提供了链接选项 -Wl,-Bstatic 和 -Wl,-Bdynamic 供用户指定链接动态库或者静态库。 -Wl,-Bstatic指示跟在后面的-lxxx选项链接的都是静态库,-Wl,-Bdynamic指示跟在后面的-lxxx选项链接的都是动态库。例如:-Wl,-Bs...原创 2020-02-03 16:34:50 · 5926 阅读 · 0 评论 -
boost获取系统时间(毫秒级)
常用到的一段用boost读系统时间的代码:#include <boost/date_time/posix_time/posix_time.hpp> // Get current time from the clock, using microseconds resolution const boost::posix_time::ptime now ...转载 2018-08-21 16:17:50 · 7712 阅读 · 2 评论 -
gdb调试
在同一个工程构建出的Debug版和Release版可执行文件projectD和projectR,使用如下objcopy命令把Debug版中的符号表加到Release版中,实现对Release版的调试。 1、objcopy --only-keep-debug projectD projectsymbol.dbg #生成符号表; 2、gdb --symbol=projectsy...原创 2018-11-28 09:15:07 · 180 阅读 · 0 评论 -
SpscQueue数据结构
一个SpscQueue的实现。在Flush函数中将c赋值为f_item的值, 在CheckRead中prefetch时将r_item赋值为c的值。 /// Lock-free queue implementation./// Only a single thread can read from the queue at any specific moment./// ...原创 2018-12-08 14:24:01 · 970 阅读 · 0 评论 -
C++ 禁用复制构造函数和赋值运算符
Google的C++风格指南中3.3节有如下规定:可拷贝类型和可移动类型总述如果你的类型需要, 就让它们支持拷贝 / 移动. 否则, 就把隐式产生的拷贝和移动函数禁用.定义可拷贝类型允许对象在初始化时得到来自相同类型的另一对象的值, 或在赋值时被赋予相同类型的另一对象的值, 同时不改变源对象的值. 对于用户定义的类型, 拷贝操作一般通过拷贝构造函数与拷贝赋值操作符定义. str...原创 2018-12-06 10:06:36 · 4831 阅读 · 0 评论 -
BatchQueue数据结构
一个BatchQueue的实现:注意一下几点:1. Reader会使用pop/front函数,用到了begin_chunk, begin_pos, spare_chunk; Writer使用push/back函数。用到了end_chunk,end_pos, back_chunk, back_pos, spare_chunk; Reader和Writer唯一共用的变量是spar...原创 2018-12-06 11:39:30 · 587 阅读 · 0 评论 -
extern "C"的用法解析
转自 http://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html 1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),...转载 2018-12-13 10:28:15 · 156 阅读 · 0 评论 -
从boost转为c++11
从boost转为c++11随着boost的特性进入c++11,目前来看项目用到的boost库除了asio之外其他都可以转而使用std标准库。boost:bind :可以替换为std::bind, 但是最好不要再使用bind,而是使用lambda表达式。智能指针:boost::shared_ptr替换为std::shared_ptr; boost::...原创 2019-02-15 08:19:39 · 2205 阅读 · 0 评论 -
boost asio学习资料
Boost.Asio的使用技巧 (中文 总结的非常好)http://blog.jqian.net/post/boost-asio.html?spm=a2c4e.11153940.blogcont243127.9.d8fc2f941Abbd7#toc_0boost.Asio的使用实践总结(英文 强烈推荐):https://www.gamedev.net/blogs/entry...原创 2019-02-15 08:56:02 · 590 阅读 · 0 评论 -
gcc --as-needed的使用
转自https://wiki.gentoo.org/wiki/Project:Quality_Assurance/As-needed Project:Quality Assurance/As-needed< Project:Quality AssuranceThis guide is meant to explain how the --as-needed LDFLAG work...转载 2019-02-19 13:10:40 · 2802 阅读 · 0 评论 -
log4cplus与g3log性能测试
https://kjellkod.wordpress.com/2015/06/30/the-worlds-fastest-logger-vs-g3log/ g3log作者对spdlog的对比和嘲讽http://moodycamel.com/blog/2014/a-fast-general-purpose-lock-free-queue-for-c++一个lockfree的queue,被g3...原创 2019-03-29 14:58:49 · 2645 阅读 · 0 评论 -
log wapper类及其性能
一个log的wapper类可以用来方便地对接各种logger,但是这对logger的性能来说可能会有影响。下面测试了Linux环境下log4cplus及其wapper类的性能。 打印100万条日志 log4cplus log4cplus with wapper Linux 同步logger 4s 4.5s 异步logger 1.9s...原创 2019-04-10 20:56:06 · 207 阅读 · 0 评论 -
关于c++中如何使用Logger的争论
c++中记录log的几个方法:1. 用一个global的logger2. 用一个singleton3. logger作为参数,为需要打印log的类或函数传递logger reference作为参数在这个stackoverflow的讨论中有另外两个方案:https://stackoverflow.com/questions/5877779/c-logger-class-wi...原创 2019-04-27 09:10:58 · 1228 阅读 · 0 评论 -
vc_redist 又名VC runtime library,或MSCVRT
什么是VC运行库? 下面是一个来自stackoverflow的回答,我觉得很有道理:https://stackoverflow.com/questions/4209684/ms-visual-c-runtime-library-what-forThe MSVCRT is a set of DLLs that implements parts of the C++ language. ...原创 2019-04-20 14:03:40 · 1852 阅读 · 0 评论 -
VS 条件断点
转自 https://blog.csdn.net/qwang24/article/details/4087423条件断点 在使用Visual Studio进行debug的时候,设置断点是最常用的、不可或缺的技术之一。大多数情况下,我们只需要在Visual Studio里按F9键,设置一个普通断点即可。但是对于一些特殊情况,这一点可能就不太管用。典型的情况就是在次数很多的循环里,我们需要...转载 2018-06-06 08:38:12 · 7519 阅读 · 0 评论 -
在Windows下使用CMake GUI
由于供应商代码使用了CMake,所以也尝试使用CMake+VS来编译C++。CMake的安装和使用入门在下面blog中有详细讲解可供参考:https://blog.csdn.net/yaoyuanyylyy/article/details/79024962本文主要记录一下自己所使用的变量设置:#想要使用的VC编译器为VS2010CMAKE_C_COMPILER D:/Program Files...原创 2018-07-12 12:56:18 · 11448 阅读 · 0 评论 -
log4cplus 使用
转自 http://www.cppblog.com/tx7do/articles/11715.html### 简介 ###log4cplus是C++编写的开源的日志系统,前身是java编写的log4j系统.受Apache Software License保护。作者是Tad E. Smith。log4cplus具有线程安全、灵活、以及多粒度控制的特点,通过将信息划分优先级使其可以面向程序...转载 2018-07-17 15:30:36 · 510 阅读 · 0 评论 -
MAKEFILE详解 伪目标 十二
读后小结:伪目标可以作为默认目标,伪目标可以有依赖,伪目标也可以作为依赖。转自 http://www.cppblog.com/ivenher/articles/22096.htmlMAKEFILE详解 伪目标 十二五、伪目标 最早先的一个例子中,我们提到过一个“clean”的目标,这是一个“伪目标”, clean: rm *.o temp 正像我们前面例子中的“cl...转载 2018-06-28 13:56:19 · 178 阅读 · 0 评论 -
MAKEFILE详解 规则 二
阅读小结:target, prerequisites, command, make会比较targets文件和prerequisites文件的修改日期, 动作名字Label转自 http://www.cppblog.com/ivenher/articles/22086.htmlMAKEFILE详解 规则 二make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链...转载 2018-06-20 11:23:50 · 141 阅读 · 0 评论 -
MAKEFILE详解 概述 一
阅读小结:源文件->目标文件->可执行文件转自http://www.cppblog.com/ivenher/articles/22085.htmlMAKEFILE详解 概述 一http://www.chinaunix.net 作者:gunguymadman 发表于:2007-04-09 07:58:37概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西...转载 2018-06-20 11:14:00 · 150 阅读 · 0 评论 -
enable_shared_from_this的用处
来自Stackoverflow的回答,很清晰地讲解了enable_shared_from_this所解决的用其他方法无法解决的问题。 https://stackoverflow.com/questions/712279/what-is-the-usefulness-of-enable-shared-from-thisfrom Dr Dobbs article on weak point...原创 2018-06-01 08:56:19 · 1926 阅读 · 4 评论 -
RVO与std::move
转自https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/RVO_V_S_std_move?lang=en读后小结:RVO/NRVO优化会直接在调用者的栈中申请空间,它的开销比move语义还要小。 并不是总使用std::move就好。R...转载 2018-05-30 14:56:47 · 916 阅读 · 0 评论 -
右值引用与转移语义 -- C++11 标准新特性
转自https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/index.html读后小结:左值,右值,左值引用,右值引用,转移构造函数,转移赋值运算符,std::move()左值与右值的定义C++( 包括 C) 中所有的表达式和变量要么是左值,要么是右值。通俗的左值的定义就是非临时对象,那些可以在多条语句中使用的对象。所有的变...转载 2018-05-30 14:38:01 · 211 阅读 · 1 评论 -
VS PDB文件详解
转自https://blog.csdn.net/feihe0755/article/details/54233714PDB文件的介绍PDB(Program Data Base),意即程序的基本数据,是VS编译链接时生成的文件。PDB文件主要存储了VS调试程序时所需要的基本信息,主要包括源文件名、变量名、函数名、FPO(帧指针)、对应的行号等等。因为存储的是调试信息,所以一般情况下PDB...转载 2018-06-13 09:32:41 · 17144 阅读 · 0 评论 -
Minidump方式保留程序崩溃现场
介绍部分转自https://www.cnblogs.com/lisuyun/p/5245609.html程序部分为原创。 Minidump方式保留程序崩溃现场在Windows平台下用C++开发应用程序,最不想见到的情况恐怕就是程序崩溃,而要想解决引起问题的bug,最困难的应该就是调试release版本了。因为release版本来就少了很多调试信息,更何况一般都是发布出去由用户使用,...原创 2018-06-13 09:19:47 · 4393 阅读 · 0 评论 -
动态链接库和静态链接库的区别
两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。(所以无论是动态链接库还是静态链接库,都会有lib文件)两种链接方式:动态链接使用动态链接库,允许可执行模块...原创 2018-05-29 15:03:43 · 29868 阅读 · 3 评论 -
c++11 随机数
转自 https://www.cnblogs.com/egmkang/archive/2012/09/06/2673253.htmlC++11带来诸多特性,random就是其一.1. random_device 标准库提供了一个非确定性随机数生成设备.在Linux的实现中,是读取/dev/urandom设备;Windows的实现居然是用rand_s,在这里强烈谴责一下. random_devi...转载 2018-05-25 11:40:57 · 277 阅读 · 0 评论 -
MAKEFILE详解 如何工作 三
阅读小结:make工作过程,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。转自http://www.cppblog.com/ivenher/articles/22087.htmlMAKEFILE详解 如何工作 三三、make是如何工作的 在默认的方式下,也就是我们只输入make命令。那么, 1、make会在当前目录下找名字叫“Makefile”或“makefile...转载 2018-06-20 13:02:37 · 379 阅读 · 0 评论 -
MAKEFILE详解 变量 四
阅读小结:用等号定义的make变量,用来使得makefile易维护。转自http://www.cppblog.com/ivenher/articles/22088.htmlMAKEFILE详解 变量 四四、makefile中使用变量 在上面的例子中,先让我们看看edit的规则: edit : main.o kbd.o command.o display.o \ ...转载 2018-06-20 13:06:56 · 141 阅读 · 0 评论 -
MAKEFILE详解 文件搜寻 十一
读后小结:VPATH变量,vpath关键字,搜索路径转自 http://www.cppblog.com/ivenher/articles/22095.htmlMAKEFILE详解 文件搜寻 十一四、文件搜寻 在一些大的工程中,有大量的源文件,我们通常的做法是把这许多的源文件分类,并存放在不同的目录中。所以,当make需要去找寻文件的依赖关系时,你可以在文件前加上路径,但最好的方法是把一个路径告诉m...转载 2018-06-28 13:44:07 · 249 阅读 · 0 评论 -
MAKEFILE详解 书写规则 十
转自 http://www.cppblog.com/ivenher/articles/22094.htmlMAKEFILE详解 书写规则 十书写规则 ———— 规则包含两个部分,一个是依赖关系,一个是生成目标的方法。 在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被这个目标所连带出来的,所以一定要让make知道你的最终目标是什么。一般来说,...转载 2018-06-28 13:28:26 · 293 阅读 · 0 评论 -
visual studio 2010 + win7 安装失败 解决方法
此前安装了VS2013并且一直在用,最近收到一个客户的部分源码+静态库(lib)需要自己编译,由于客户提供的静态库是在VS2010下编译的,所以需要自己安装VS2010。安装自己下载的VS2010时出错如下:[07/09/18,14:34:07] VC 9.0 Runtime (x86): [2] CMsiComponent::Install() expects the setup file fo...原创 2018-07-10 11:05:08 · 6144 阅读 · 0 评论 -
MAKEFILE详解 环境变量 工作方式 九
阅读小结:环境变量,make工作步骤转自 http://www.cppblog.com/ivenher/articles/22093.htmlMAKEFILE详解 环境变量 工作方式 九四、环境变量 MAKEFILES 如果你的当前环境中定义了环境变量MAKEFILES,那么,make会把这个变量中的值做一个类似于include的动作。这个变量中的值是其它的Makefile,用空格分隔。只是,它...转载 2018-06-28 10:12:34 · 678 阅读 · 0 评论