C++
文章平均质量分 58
沙漠飞鱼
这个作者很懒,什么都没留下…
展开
-
结构体对齐原则
原则一:每个成员所放位置:结构体中元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从结构体存储的首地址开始,每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始(以结构体变量首地址为0计算)。原则二:最后结算:在经过第一原则分析后,检查计算出的存储单元是否为所有元素中最宽的元素的长度的整数倍,是,则结束;若不是,则补齐为它的整数倍。转载地址:https://blog.csdn.net/u011404495/article/d转载 2021-02-19 11:37:13 · 1528 阅读 · 0 评论 -
cmake脚本汇总(持续更新中)
主要针对VS生成项目1、release模式下生成pdb文件:set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi /Od") (对应调试信息格式以及优化等级)set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG") (对应生成调试文件,exe文件使用)set(CMAKE_SHARED_LI...原创 2021-01-20 23:37:06 · 443 阅读 · 0 评论 -
使用dll“无法解析的外部符号”的一种解决方案
遇到一个问题,使用dll导出的一个类D一直报“无法解析的外部符号”,头文件和源文件都在项目里,成员函数也都有实现。最后发现这个类D继承了基类A,A里面有虚函数,但是D里面没有重写,所以外部程序无法找到这些虚函数的实现。解决方法是将A也设置为导出类。...原创 2020-10-14 10:50:31 · 4082 阅读 · 0 评论 -
exit退出进程
Windows平台调用::exit(exitcode)后,进程会直接退出。C++局部对象的析构函数得不到调用,所以需要在析构函数中进行数据回写的目的不能达到。应尽量避免使用exit函数;原创 2020-09-23 11:14:32 · 487 阅读 · 0 评论 -
select函数的用法
select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型,原型:int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval *timeout);所在的头文件为:#include <sys/time.h> 和#inclu...转载 2019-11-05 11:35:10 · 432 阅读 · 0 评论 -
C++单继承、多继承、菱形继承内存布局(虚函数表结构)
单继承:只有一个基类和一个派生类class Base{public: virtual void fun1() ...转载 2019-10-16 19:45:59 · 579 阅读 · 0 评论 -
Linux下安装qtcreator部分问题解决
1、解决/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found问题当前程序的编译器的版本是比较低的,只要升级一下就可以了。可以用如下命令查看一下当前GCC版本:[cpp] view plaincopystrings /usr/lib/libstdc++.so.6 | grep GLIBCXX 在我的机器上运行结果这样的:[pytho...转载 2018-02-05 22:11:53 · 2264 阅读 · 0 评论 -
socket connect 函数设置超时
众所周知,在进行网络编程的时候,如果使用系统connect函数,无法设置超时,而在连接一个不存在的主机时,将会一直阻塞。其实在调用connect函数时,将句柄设置为非阻塞,然后调用select函数,可以达到设置超时的效果。[cpp] view plain copybool connect(char *host,int port转载 2018-02-09 19:34:51 · 1729 阅读 · 0 评论 -
智能指针 weak_ptr
weak_ptr: weak_ptr是为了配合shared_ptr而引入的一种智能指针,它更像是shared_ptr的一个助手而不是智能指针,因为它不具有普通指针的行为,没有重载operator*和->,它的最大作用在于协助shared_ptr工作,像旁观者那样观测资源的使用情况.用法: weak_ptr被设计为与shared_ptr共同工作,可以从一个shared_ptr或者另一个w转载 2018-02-04 11:28:33 · 144 阅读 · 0 评论 -
unsigned int与int相加的问题
[cpp] view plain copyint main() { int a = -6; unsigned int b = 4; if(a+b > 0) printf("a+b>0\n");//这句话被打印 else printf("a+b<0\n"); int z = a+b; ...转载 2018-04-27 22:14:36 · 303 阅读 · 0 评论 -
linux中fork()函数详解
一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来转载 2018-02-02 20:26:56 · 270 阅读 · 0 评论 -
C++服务器:关于两次fork
我觉得这里还有些重要的东西没讲,比如setsid()(参见apne 8-11.).两次fork()的作用首先,要了解什么叫僵尸进程,什么叫孤儿进程,以及服务器进程运行所需要的一些条件。两次fork()就是为了解决这些相关的问题而出现的一种编程方法。孤儿进程 孤儿进程是指父进程在子进程结束之前死亡(return 或exit)。如下图1所示: 在一定转载 2018-02-01 22:40:12 · 322 阅读 · 0 评论 -
qt使用动态库(DLL)
本文主要讲解在QT开发环境中如何使用VC生成的DLL及QT自身生成的DLL。至于其它情况本文不作讨论。连接库分为2种(1)动态连接库,通常有.h .lib .dll三个文件,功能实现在dll中(2)静态连接库,通常有.h .lib二个文件,功能实现在lib中由上可以看出动态库的lib和静态库的lib文件是不同的。 如果使用生成连接库的开发环境与使用连接库的开发环境相同,一般不会出什...转载 2018-10-31 15:14:13 · 1092 阅读 · 0 评论 -
C++ map遍历删除
[cpp] view plain copyint main(int argc, char* argv[]) { map mapData; mapData["a"] = "aaa"; mapData["b"] = "bbb"; mapData["c"] = "ccc";转载 2018-01-31 20:17:10 · 2743 阅读 · 0 评论 -
实现fopen支持中文的方法
VC的fopen函数第一个参数是const char*,一旦遇到中文文件名就难以应付了,如果中文是UTF8编码的话,我们还可以用下列代码将其转换为UNICODE,然后用_wfopen函数打开文件。代码如下:?1234567891011121314151617181920boolUTF8ToUnicode(constchar* UTF8, wchar_t* strUnicode){ DWORDdwU...转载 2018-06-06 21:56:58 · 2887 阅读 · 0 评论 -
提高程序运行效率的10个简单方法
对于每一个程序员来说,程序的运行效率都是一个值得重视,并为之付出努力的问题。但是程序性能的优化也是一门复杂的学问,需要很多的知识,然而并不是每个程序员都具备这样的知识,而且论述如何优化程序提高程序运行效率的书籍也很少。但是这并不等于我们可以忽略程序的运行效率,下面就介绍一下本人积累的一些简单实用的提高程序运行效率的方法,希望对大家有所帮助。注:以C/C++程序为例一、尽量减少值传递,多用引用来传递...转载 2018-06-13 21:18:20 · 27640 阅读 · 3 评论 -
C++的一大误区——深入解释直接初始化与复制初始化的区别
一、Primer中的说法首先我们来看看经典是怎么说的:“当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。复制初始化首先使用指定构造函数创建一个临时对象,然后用复制构造函数将那个临时对象复制到正在创建的对象”还有一段这样说,“通常直接初始化和复制初始化仅在低级别优化上存在差异,然而,对于不支持复制的类型,或者使用非exp...转载 2018-06-13 21:47:58 · 240 阅读 · 0 评论 -
c++类成员函数作为回调函数
一直以来都被回调函数的定义给整蒙了。最近又仔细学了会,感觉回调函数,我认为就是将一个函数指针A作为参数传入另外一个函数B,然后在函数B中调用函数A。 普通回调 具体先看一个简单的例子: [cpp] view plain copy#include<stdio.h> void printWelcome(int len) { ...转载 2018-06-09 19:27:51 · 20895 阅读 · 2 评论 -
正则表达式中常用符号
一: 正则在Perl、Py森、Ruby、Java等语言中文本的正则表达式几乎是一样的 以前常用到的在网上都有现成的例子拿来用,比如电话格式、邮箱格式之类的。 但是自然语言处理中往往会根据自己的需求来制定一个表达式,如果正则的知识掌握的比较片面,在编写自然语言处理程序时可能会觉得苦恼。 在《自然语言处理简明教程》里面有很系统的正则表达式教程,特意总结出来消化吸收。...转载 2018-10-25 16:43:15 · 352 阅读 · 0 评论 -
C#调用C/C++动态库 封送结构体,结构体数组
一. 结构体的传递 Cpp代码 #define JNAAPI extern "C" __declspec(dllexport) // C方式导出函数 typedef struct { int osVersion; int majorVersion; int minorVersion; ...转载 2018-10-31 13:37:36 · 962 阅读 · 0 评论 -
C++回调函数和this指针的实例
--------------------- 作者:徐小hi 来源:CSDN 原文:https://blog.csdn.net/u010177010/article/details/50837067 版权声明:本文为博主原创文章,转载请附上博文链接!在做到界面开发的过程中,往往需要通过子窗口去操作父窗口的问题。方法很多,大致实现下回调函数和类静态对象的使用。在类的非静态函数的形参列表...转载 2018-10-31 14:28:26 · 1473 阅读 · 0 评论 -
socket的阻塞与非阻塞send/recv
先理一下阻塞和非阻塞的概念:阻塞就是让当前调用线程一直处于停止等待当中,挂起的状态,线程函数会被卡住。非阻塞则是不管运行结果如何,都会继续往下执行(往往都要处理很多返回结果),线程函数里一般都是一个循环,不停的轮询。再理一下发送接收函数:send/sendto函数,只是把应用层的数据拷贝到内核发送缓冲区,并不保证数据一定会被发送到对端,真正执行发送及什么时候发送是由系统(协议栈)决...转载 2019-02-21 16:50:58 · 1642 阅读 · 0 评论 -
VS2013下live555的编译的注意事项
项目需要,需要搭建live555流媒体服务器进行本地客户端解码的测试。网上找了一下资料,讲的都挺详细的,参照的博客链接如下。1、http://www.cnblogs.com/skyseraph/archive/2012/04/11/2442840.html2、https://www.cnblogs.com/foohack/p/4757366.html3、https://blog.c...原创 2019-03-07 22:56:00 · 263 阅读 · 0 评论 -
MySQL connector/C++的用法
原文地址:首先去MySQL官网下载MySQL connector/C++http://dev.mysql.com/downloads/connector/cpp/根据自己系统平台下载相应的版本。文件夹名字太长,将“mysql-connector-c++-noinstall-1.0.5-win32”改为“mysql”。下面要配置vs2008的环境。1. 项转载 2016-01-06 21:12:09 · 1438 阅读 · 0 评论 -
用string存取二进制数据
STL的string很强大,用起来也感觉很舒服,这段时间在代码中涉及到了用string存取二进制数据的问题,这里记录一下,以供以后参考。首先提一下STL中string的参考资料:http://www.cplusplus.com/reference/string/string/ ,不懂的朋友可以看下。在数据传输中,二进制数据的buffer一般用系统预设的大数组进行存储,而不是STL的转载 2018-01-31 20:03:49 · 3602 阅读 · 1 评论 -
vs2013:报错 无法打开包含文件 "winsock2.h" 的一种解决办法
解决方法如下:http://stackoverflow.com/questions/21029654/error-c1083-cannot-open-include-file-winsock2-h-no-such-file-or-directory: An alternative is to try this: - Open the Project properties - Goto Co转载 2018-01-31 19:22:53 · 10205 阅读 · 0 评论 -
Dumpbin命令查看软件32位/64位
64位的程序是不能加载32位的库,32位的库和64位应用程序是不兼容的。 所以如果在load过程中发现出错,首先得确定所加载的库是64的。如何判断库是64位的?dumpbin.exe 它用来分析二进制库和程序的结构。使用VS的dumpbin工具可以查看库文件的32位/64位。使用方法是到cmd切换到VS安装目录下的VC/bin目录下,执行 dumpbin /headers xxx.dll即可查转载 2017-08-25 16:46:37 · 1518 阅读 · 0 评论 -
C++中重载、重写(覆盖)和隐藏的区别
基本概念: 重载:是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。示例:class A{public: void test(int i); void test(double i);//overload void test(int i, double j);//overload转载 2017-02-15 14:58:59 · 342 阅读 · 0 评论 -
C++父类子类中虚函数的使用
构造函数不能是虚函数,因为在调用构造函数创建对象时,构造函数必须是确定的,所以构造函数不能是虚函数。析构函数可以是虚函数。 1.父类Father.h:[cpp] view plain copy#pragma once class Father { public: Father(void)转载 2017-02-22 16:01:14 · 968 阅读 · 0 评论 -
指针函数与函数指针
1.指针函数先看下面的函数声明,注意,此函数有返回值,返回值为int *,即返回值是指针类型的。[cpp] view plain copyint *f(int a, int b); 上面的函数声明又可以写成如下形式:int* f(int a, int b);让指针标志 * 与int紧贴在一起,而与函数名f转载 2017-02-22 15:07:54 · 217 阅读 · 0 评论 -
指针常量 与常量指针的区别
在C/C++中关键字const用来定义一个只读的变量或者对象,有如下优点 (1)便于类型检查,如函数的函数 fun(const int a) a的值不允许变,这样便于保护实参。 (2)功能类似与宏定义,方便参数的修改和调整。如 const int max = 100; (3)节省空间,如果再定义a = max,b=max。。。就不用在为max分配空间了,而用宏定义的话转载 2017-02-21 16:44:34 · 303 阅读 · 0 评论 -
c++ 关于char *的类库函数
c++ 关于char *的类库函数转载 2016-07-19 22:32:28 · 2328 阅读 · 0 评论 -
ffmpeg之rtsp分析流程
1,首先从ffplay.c main()is = stream_open(input_filename, file_iformat);2,在straem_open里面is->read_tid = SDL_CreateThread(read_thread, is);3,read_threaderr = avformat_open_input(&ic, is->转载 2016-07-19 22:09:47 · 1095 阅读 · 0 评论 -
VS2013 编译ffmpeg
0如何下载FFMPEG源码下载安装器:下载完成后安装,安装完成后点运行,标记上以下几项,然后在Installation菜单下点击Apply Changes:下载:下载后改名,复制到C:/MinGW/msys/1.0/bin目录下:转载 2016-03-24 16:12:03 · 556 阅读 · 0 评论 -
log4cpp介绍以及使用
Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、文件、回滚文件、调试器、Windows日志、本地syslog和远程syslog服务器中。1、Log4cpp简介 Log4cpp是个基于LGPL的开源项目,移植自Java的日志处理跟踪项目log4j,并保持了API上的一转载 2015-12-03 23:09:28 · 1327 阅读 · 0 评论 -
C++学习网站
C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建议,以进一步加强这方面的清单。1、http://snippets.dzone.com/tag/c/ --数以千计的有用的C语言源代码片段2、http://转载 2015-12-02 22:54:56 · 365 阅读 · 0 评论 -
C++开源项目
个人觉得比较经典的C++ 开源项目,整理如下: 1 、log4cpluslog4cplus 是C++ 编写的开源的日志系统, 功能非常全面。C++ 版的log4j网址:http://log4cplus.sourceforge.net/ 2 、GlogGoogle Glog 是一个C++ 语言的应用级日志记录框架,提供了 C++ 风格的流操作和转载 2015-12-02 23:08:42 · 301 阅读 · 0 评论 -
SVN使用教程总结
SVN使用教程总结SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本。Subversion是什么? 它是一个自由/开源的版本控制系统,一组文件存放在中心版本库,记录每一次文件和目录的修改,Subversion允许把转载 2015-11-29 00:05:53 · 403 阅读 · 0 评论 -
C++中mutable关键的学习
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态转载 2015-12-16 22:22:11 · 259 阅读 · 0 评论 -
VS2013 F12无法转到函数的定义处,总是从“元数据”获取的问题的解决方法
右键项目名称-->点击菜单中的“添加”-->点击“引用”-->在弹出窗中点击“解决方案”下的“项目”,而不是“浏览”下的dll,勾选要引用的项目,点击“确定”。以上为vs2013版过程。原创 2015-10-27 10:13:31 · 7774 阅读 · 1 评论